Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > MathGL vs Qwt+qwtplot3d


Автор: KVA 14.9.2010, 08:09
Здравствуйте. Передо мной встал вопрос какую библиотеку использовать для отрисовки графиков в Qt4.6.
Имеется сигнал, который приходит каждую мс. 
Необходимо выводить график в режиме осциллографа, реального времени, стационарного сигнала. 
Также придется реализовывать кучу математических функций по преобразованию сигнала и вывода результата преобразования в том числе и 3-D.
Стационарных сигналов может быть на графике несколько с разными шкалами по оси значений.
Необходим курсор по значениям сигнала, метки на значениях, табличное представление сигнала.
Короче полноценное графическое приложение.

Рассматривая имеющиеся библиотеки остановила свой взор на libmgl.dll c оберткой под Qt libmgl-qt.dll и qwt.dll c qwtplot3d.dll.
Для libmgl.dll c оберткой под Qt libmgl-qt.dll:
+ русская поддержка. 
- требуются дополнительные gsl, jpeg,..

Для libmgl-qt.dll и qwt.dll c qwtplot3d.dll: 
+ производитель trolltech- полная совместимость со всем приложением.
- сложность(так пишут, сама не разбиралась)
- не заточена под вывод в реальном времени

Какие ещё плюсы-минусы знаете вы?
Помогите сделать выбор!
Спасибо.

Автор: W4FhLF 14.9.2010, 08:30
Цитата(KVA @  14.9.2010,  08:09 Найти цитируемый пост)
- не заточена под вывод в реальном времени


Ну почему, там есть необходимые средства для этого. Точнее интерфейс предусматривает, а реализовать придётся самому. 

В целом я бы прежде всего руководствовался следующими вещами. Qwt и тем более QwtPlot3D уже давно не развиваются и вряд ли получат развитие. В сущности, если нужно нечто сложнее того, что показано на картинках сайтов этих библиотек, то это придётся писать самому. Хотя надо отдать должное, что у этих библиотек очень гибкий интерфейс. 
MathGL самодостаточная библиотека с гигантским потенциалом в плане возможностей, однако она не заточена под Qt и несмотря на то, что имеет необходимые биндинги для qt всё равно достаточно далека от неё. Но зато, один раз разобравшись и набрав немного практических знаний, вы решите все ваши задачи без особого геммороя. Т.е. если проект крупный, то конечно оптимальным является MathGL. 
Ещё бы вам советовал изучить вопрос возможности интерактивной работы с графиками MathGL из Qt, если вам это необходимо, потому что там могут возникнуть проблемы. 

Автор: borisbn 14.9.2010, 08:49
Небольшое замечание по производительности компонент. Ни один человек не сможет увидеть 1000 кадров/сек, поэтому отображать данные в реальном масштабе времени нет смысла. Есть смысл копить их в реальном времени, а отображать 30-20 кадров/сек.
Я, например, делал так: создаю поток, который занимается отображением, передаю ему данные на каждом цикле получения данных ( в твоём случае каждую мс ), а отрисовываю раз в 50 мс ( или реже, в зависимости от загрузки системы ). Получается примерна так ( псевдокод )
Код

DrawThread::run() {
lock_data();
copy_data_to_local_array();
unlock_data();
emit draw();
sleep( 50 );
}

WorkThread::run() {
get_data();
lock_draw_data();
copy_data_to_draw_thread()
unlock_draw_data();
}

Автор: KVA 14.9.2010, 11:51
qwt-5.2.1 от 11.04.2010, так что вроде норм, а вот qwtplot3d-0.2.7 от 25.07.2007

Цитата

MathGL...однако она не заточена под Qt и несмотря на то, что имеет необходимые биндинги для qt всё равно достаточно далека от неё.


А можно поподробнее? 

Цитата

Т.е. если проект крупный, то конечно оптимальным является MathGL


Проект крупный, но полностью на Qt4...
Что делать?

Автор: W4FhLF 14.9.2010, 15:16
Цитата(KVA @  14.9.2010,  11:51 Найти цитируемый пост)
qwt-5.2.1 от 11.04.2010, так что вроде норм, а вот qwtplot3d-0.2.7 от 25.07.2007


Да, там была исправлена ошибка с поддержкой Qt 4.6 и ещё что-то по мелочи вроде. Ничего нового не добавляется уже несколько лет. 


Цитата(KVA @  14.9.2010,  11:51 Найти цитируемый пост)
А можно поподробнее? 


Ну Qwt была создана на базе Qt и соответственно вся идеология и весь функционал основан на принципах, которые приняты в Qt. Для MathGL всё немного по-другому. Эта достаточно универсальная библиотека и Qt для неё лишь фронтенд. Т.е. у вас будет виджет типа QMathgl и вы на нём будете всё отрисовывать через внутренние функции этой библиотеки, которая тянет за собой другие библиотеки. Соответственно при достаточно плотной интеграции могут возникать проблемы (например, интерактивная работа с графиками мышкой или горячими клавишами). А может ваши задачи таковы, что и проблем никаких никогда не возникнет. Это вам виднее.

Цитата(KVA @  14.9.2010,  11:51 Найти цитируемый пост)
Проект крупный, но полностью на Qt4...Что делать?


Вам следует выбрать задачу, что-нибудь посложнее, которая будет близка к тем, что вы собираетесь решать. И решить её с применением обеих библиотек. 

Автор: KVA 15.9.2010, 07:02
Цитата

И решить её с применением обеих библиотек. 


Наверное это самый верный подход, но откуда взять время? 

Хотелось бы услышать ещё мнения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)