При разработке программ, в которых требуется визуализация данных (например, построение графиков функций), возникает дилемма: писать подпрограмму построения «с нуля» или использовать готовые специализированные библиотеки. Первый вариант является трудоемким, использование же библиотек позволяет значительно сократить время разработки. Однако, возникает проблема выбора наиболее подходящей библиотеки под конкретную практическую задачу.
В работе будет описано решение, выбранное авторами в процессе разработки программы синтеза и анализа весовых функций, и полученные с его помощью результаты.
Разрабатываемая программа представляет собой инженерный инструмент для моделирования и расчета частотных характеристик интегрирующих аналого-цифровых преобразователей с весовым интегрированием. Пользователь путем задания исходных параметров (вида реализуемой весовой функции, значений весовых коэффициентов, частотного диапазона и др.) в результате моделирования в автоматическом режиме получает АЧХ, формируемую данной весовой функцией (ВФ), в канале интегрирующего преобразования. При этом пользователю предоставляются инструменты для исследования и сравнительного анализа получаемых АЧХ. Основным аналогом разрабатываемой программы является модуль FDATool (Filter Design & Analysis Tool) среды моделирования MATLAB, предназначенный для проектирования дискретных фильтров.
Рассмотрим наиболее популярные из применяемых сегодня библиотек для визуализации данных: QWT, mCtrl, GtkGraph, Qt Charts.
QWT (Qt Widgets for Technical Applications) – библиотека представляющая собой набор Qt-виджетов, для визуализации (графического представления) числовых данных. Включает в себя компоненты, позволяющие не только отображать, но и масштабировать/перемещать полученные графики, оформлять их меняя цвет линий, размер шрифта, форму маркеров и т.д. Кроме привязки к Qt C++, есть привязки к PyQt, QtRuby, PythonQt [1].
mCtrl – библиотека обеспечивающая дополнительный набор элементов пользовательского интерфейса для приложений, написанных на win32 api. Включает компоненты для построения различных видов графиков [2].
GtkGraph – набор Gtk-виджетов, обеспечивающих визуализацию числовых данных [3].
Qt Charts – платный компонент Qt, для графического представления данных. Для отображения может использовать QWidgets, QGraphicsWidget, QML [4].
Преимущества и недостатки каждой приведены в сравнительной таблице 1.
Таблица 1 – Сравнительные характеристики библиотек
Библиотека |
Платформы |
Варианты визуализации |
Дополнительные функции |
Стоимость |
QWT |
Windows, Linux, OS X, Android, Symbian |
Графики кривых, точечные графики, спектрограммы, гистограммы |
Масштабирование, перемещение, стилизация, экспортирование графиков. Дополнительные виджеты: шкалы, ползунки, компас, таймеры. |
бесплатная |
mCtrl |
Windows |
Графики кривых, точечные графики, гистограммы, круговые диаграммы. |
Стилизация графиков, дополнительные элементы пользовательского интерфейса. |
бесплатная |
GtkGraph |
Windows, Linux, OS X |
Графики кривых |
Стилизация графиков |
бесплатная |
QtCharts |
Windows, Linux, OS X, Android, Symbian |
Графики кривых, точечные графики, гистограммы, круговые диаграммы. |
Стилизация графиков, перемещение, масштабирование. |
платная |
Среди рассмотренных вариантов, наиболее функциональной и гибкой библиотекой является QWT, разработанная Джозефом Вилгеном (Josef Wilgen) и Уве Раттманом (Uwe Rathmann). Помимо виджета для двумерного отображения данных (QwtPlot) она включает в себя классы для отображения данных в разных масштабах осей, различные стили отображения кривых и маркеров на виджете QwtPlot, а также некоторые другие вспомогательные виджеты. Библиотека содержит компоненты и классы для следующих построений:
-
плоские кривые, отрезки;
-
точечные диаграммы;
-
спектрограммы, изолинии;
-
гистограммы;
-
элементы управления: ручки-регуляторы, ползунки, компасы, различные индикаторы [1].
Данная графическая библиотека позволяет значительно упростить процесс визуализации данных в программе. Упрощение заключается в следующем: нет необходимости вручную прописывать элементы отображения, такие как шкалы координат, сетки, кривые данных и другие. Следует лишь задавать параметры этих элементов. Qwt позволяет работать с достаточно большими объемами данных. Её можно использовать в разработке кроссплатформенных решений с использованием библиотек Qt [5].
Qwt распространяется на условиях особой лицензии, Qwt License, Version 1.0, представляющей собой LGPL с тремя исключениями, касающимися виджетов, производных от Qwt, статической линковки, а также сопровождения приложений, использующих Qwt, копией лицензии Qwt. На рисунке 1 приведена диаграмма классов QWT.
Рисунок 1 – Диаграмма классов библиотеки QWT
Использование библиотек Qt и QWT позволило разработать интуитивно понятный интерфейс для разрабатываемой программы (названной WF Plotter), показанный на рисунке 2. Главное окно включает: меню (1), окно для построения графика АЧХ весовой функции (2), окно для построения графика ВФ во временной области (3), блок настроек построения (4), блок анализа ВФ (5), кнопка построения (6).
Рисунок 2 – Интерфейс программы WF Plotter
Для построения графиков, нужно заполнить вкладку параметров и нажать кнопку «Построить графики», пример правильного заполнения полей приведен на рисунке 3. Рядом с вкладкой параметров построения располагается вкладка, с помощью которой можно проанализировать построенную АЧХ. Все построенные графики можно сохранить в нескольких популярных форматах изображений (как растровых, так и векторных), а также в формате PDF.
Рисунок 3 – Пример построения графиков в программе WF Plotter
Таким образом, использование библиотеки QWT, позволило эффективно решить проблему визуализации данных при разработке программных средств синтеза и анализа весовых функций. Разработанное приложение может быть использовано в научно-исследовательской и опытно-конструкторской работе, в рамках проектирования интегрирующих АЦП с заданными динамическими характеристиками, специалистами соответствующего профиля, а также в учебных целях при подготовке студентов.
Библиографический список
-
Информационный сайт “LINUX.ORG.RU” [Электронный документ] URL: http://www.linux.org.ru/tag/qwt (дата обращения: 20.08.2015).
-
Информационный сайт “Sourceforge” [Электронный документ] URL: http://sourceforge.net/projects/mctrl/ (дата обращения: 23.08.2015).
-
Раздел Gtkgraph информационного сайта “Sourceforge” [Электронный документ] URL: http://gtkgraph.sourceforge.net/ (дата обращения: 22.08.2015).
-
Информационный сайт “QT” [Электронный документ] URL: http://doc.qt.io/QtCharts/ (дата обращения: 23.08.2015).
-
Информационный сайт “Хабхабр” [Электронный документ] URL: http://habrahabr.ru/post/211204/ (дата обращения: 20.08.2015).
-
Роберт Лафоре. Объектно-ориентированное программирование в С++. / Пер. с англ. А. Кузнецов, М. Назаров, Владимир Шрага Изд.: «Питер», 2015. – 928 с.
-
Г. Шилдт C++. Базовый курс / Пер. с англ. Н. Ручко. Изд.: «Вильямс», 2014. – 624 с.
-
Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му. Язык программирования C++. Базовый курс. Изд.: «Вильямс», 2014. – 1120 с.
-
Марк Саммерфилд. Qt. Профессиональное программирование. Разработка кроссплатформенных приложений на С++. / Пер. с англ. А. Слинкин. Изд.: «Символ-Плюс», 2011. – 560 с.