Russian Qt Forum
Ноябрь 24, 2024, 04:24
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
Вот такая задача - поделитесь опытом
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Вот такая задача - поделитесь опытом (Прочитано 7454 раз)
once_again_abc
Гость
Вот такая задача - поделитесь опытом
«
:
Август 18, 2011, 15:13 »
Есть некое устройство, генерящее поток (скажем 30000 значений в секунду) однородных данных в некотором диапазоне (например [-10:+10]).
Есть некое Qt приложение, которое должно принимать этот поток данных и отрисовывать их в виде графиков (на одном виджете в одной системе координат).
Обязательно нужно динамическое масштабирование картинки.
Чрезвычайно важна точность рисования/разрешение - при этом нужно как-то найти компромисс с производительностью т.к. еще _очень_ важна максимально возможная скорость отрисовки для точной и своевременной реакции пользователя на события.
Очень нужна возможность выделять регион и увеличивать/уменьшать его масштаб с соответствующей детализацией выделенных участк(-а-)ов графика.
С Qt я почти не знаком, изучаю его пару недель. Т.е. мне по идее все равно, что сейчас изучать с нуля - Qt QPainter, etc. или QWT и соответствующие классы либо вообще что-то другое, что можно использовать внутри Qt (для кросс-платформенности).
И еще важный момент - мне необходимо предоставить первую работающую версию в кратчайшие сроки.
Вопросы следующие:
1. Какой наиболее подходящий инструмент для решения такой задачи вообще, в принципе (в контексте Qt)?
2. Какое может быть наиболее адекватное решение в моей конкретной ситуации (упрощенно - что делать, куда бежать)?
Спасибо!
Записан
once_again_abc
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #1 :
Август 18, 2011, 15:43 »
еще нашел вот эти библиотеки:
http://plplot.sourceforge.net/
и
http://mathgl.sourceforge.net/
также работают с Qt.
Очень нуждаюсь в советах тех, кто уже решал подобные задачи, неважно - успешно или нет.
Записан
gavlig
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #2 :
Август 18, 2011, 23:07 »
Сам сейчас мучаюсь с максимально оптимальной отрисовкой. Посоветовали QGraphicsView, подробно почитать можно в assistant в статье Graphics View Framework. Только вот предупреждаю, что если сцену надо часто скроллить, этот фреймворк неиллюзорно грузит проц, вне зависимости от того, кто отрисовывает вьюпорт - опенгл или нет.
Записан
once_again_abc
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #3 :
Август 19, 2011, 01:06 »
странно, что бывалые молчат =)
Записан
Prm
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #4 :
Август 19, 2011, 06:59 »
Смотрите в сторону Qwt. Вроде достаточно шустро работает. Плюс имеет весь интересующий функционал(увеличение, выделение области).
Записан
Sancho_s_rancho
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #5 :
Август 19, 2011, 09:34 »
Я в бывалые записываться не буду, но отвечу.
Средний монитор имеет ширину от 1000 до 2000 точек. Соответственно вам хочется ежесекундно обновлять от 15 до 30 графиков на всю ширину экрана. А приступ эпилепсии не начнется? И еще надо какая-то точность. Судя по всему за монитором будет сидеть супермен. Скорее всего задача поставлена неверно.
И второе.
НЕ ИСПОЛЬЗУЙТЕ QGraphicsView для такого рода задач.
Он предназначен для графики, а не для графиков. Производительность просядет, а код станет только сложнее.
Записан
Sancho_s_rancho
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #6 :
Август 19, 2011, 09:40 »
Цитата: once_again_abc от Август 18, 2011, 15:13
Вопросы следующие:
1. Какой наиболее подходящий инструмент для решения такой задачи вообще, в принципе (в контексте Qt)?
2. Какое может быть наиболее адекватное решение в моей конкретной ситуации (упрощенно - что делать, куда бежать)?
Спасибо!
1. С QPainter буде все проще и гибче.
2. Изучить Qt и написать виджет самостоятельно. Если проект развивать не планируется, то можно взять чтото готовое, типа qwt. Ну или заплатить мне и я все сделаю.
Записан
gavlig
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #7 :
Август 19, 2011, 11:23 »
Цитата: Sancho_s_rancho от Август 19, 2011, 09:34
Я в бывалые записываться не буду, но отвечу.
Средний монитор имеет ширину от 1000 до 2000 точек. Соответственно вам хочется ежесекундно обновлять от 15 до 30 графиков на всю ширину экрана. А приступ эпилепсии не начнется? И еще надо какая-то точность. Судя по всему за монитором будет сидеть супермен. Скорее всего задача поставлена неверно.
И второе.
НЕ ИСПОЛЬЗУЙТЕ QGraphicsView для такого рода задач.
Он предназначен для графики, а не для графиков. Производительность просядет, а код станет только сложнее.
Скажите, пожалуйста, если не секрет, что лучше использовать для динамической отрисовки? QPainter - единственный вариант(в рамках Qt, естественно) или есть другие альтернативы?
Записан
Sancho_s_rancho
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #8 :
Август 19, 2011, 11:38 »
Если речь идет о графиках, то QPainter.
Если что-то типа casual game (не знаю, как это у геймеров по-русски называется) или заковыристого интерфейса пользователя, то или Graphics Framework или qml. QML при желании можно сдобрить С++ и QPainter. Там все органично связывается. В общем, зависит от задачи.
«
Последнее редактирование: Август 19, 2011, 11:40 от Sancho_s_rancho
»
Записан
Странник
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #9 :
Август 19, 2011, 14:40 »
на заре своей Qt-карьеры решал подобную задачу (прием данных из COM-порта с детекцией ошибок и цифровой фильтрацией + визуализация на нескольких графиках в реальном времени с возможностью масштабирования, в том числе автоматического подбора оптимального масштаба и шага сетки). приличных готовых решений тогда не нашел, реализовал на QPainter - с производительностью проблем не было, частота входного сигнала правда была порядка на три поменьше = ) времени на все ушло две недели, с Qt до этого всерьез не сталкивался.
если решитесь писать сами - посмотрите пример plotter из главы 5 книги Бланшета и Саммерфилда "Qt 4 программирование GUI на C++", местами похоже на вашу задачу. исходники примера во вложении.
«
Последнее редактирование: Август 19, 2011, 14:42 от Странник
»
Записан
once_again_abc
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #10 :
Август 20, 2011, 03:11 »
ОГРОМНЕЙШЕЕ ВАМ всем спасибо за советы!
проект сложный и расчитан на несколько лет. будет развиваться и расширяться. задачу я здесь описал несколько упрощенно, на самом деле все несколько сложнее. но на данном этапе такое приближение вполне для нас достаточно.
делать все это нужно мне самому, так что мне предстоит расти вместе с проектом и знаниями о Qt и в частности о графике в Qt.
соответственно будут глупые вопросы, но постараюсь не надоедать слишком сильно =)
Спасибо!
Записан
gavlig
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #11 :
Август 20, 2011, 10:50 »
Вам бы какой-нибудь блог завести и по мере развития проекта рассказывать нам о достигнутом. Мне было бы очень интересно
Записан
once_again_abc
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #12 :
Август 22, 2011, 01:55 »
Цитата: gavlig от Август 20, 2011, 10:50
Вам бы какой-нибудь блог завести и по мере развития проекта рассказывать нам о достигнутом. Мне было бы очень интересно
честно признаюсь, я ленивый в этом отношении. но я подумаю =)
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Вот такая задача - поделитесь опытом
«
Ответ #13 :
Август 22, 2011, 12:37 »
Ежели не будет задействован OpenGL, то нужно иметь в виду, что отрисовка ломаных линий с большим количеством точек со сглаживанием под виндой будет очень сильно тормозить.
Записан
Qt 5.11/4.8.7 (X11/Win)
once_again_abc
Гость
Re: Вот такая задача - поделитесь опытом
«
Ответ #14 :
Сентябрь 27, 2011, 16:29 »
еще раз хочу сказать спасибо за советы.
выбранный мною путь оказался верным. задача блестяще решена. никаких тормозов, точность максимально возможная (вплоть до одного сэмпла сигнала). 32 канала прекрасно отрисовываются на максимальном разрешении с сэмплингом данных до 250000/сек. работает масштабирование, перемещение вдоль "свипа", зум...
если кто-то будет реализовывать подобную задачу, рекомендую использовать QImage + QPainter + QThread. производительность просто аццкая. достаточно даже drawPolyline на 32 массива точек.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...