Введение
Графики нужны во многих приложениях: от простого отображения показаний датчика до научных расчётов и финансовых панелей. В самом Qt долгое время не было готового решения, поэтому сообщество использовало сторонние библиотеки. Сегодня выбор шире, но вопрос «чем строить графики в Qt» по-прежнему задают постоянно. В статье сравним три основных варианта: Qwt, QCustomPlot и официальный модуль Qt Charts, а также разберём установку и минимальные примеры для каждого.
Чем строить графики в Qt: сравнение библиотек
| Qwt | QCustomPlot | Qt Charts / Qt Graphs | |
|---|---|---|---|
| Подключение | Сборка библиотеки | Два файла в проект | Модуль Qt |
| Лицензия | Qwt License (на основе LGPL) | GPL или коммерческая | GPL или коммерческая Qt |
| Скорость на больших данных | Высокая | Высокая | Средняя |
| Внешний вид по умолчанию | Строгий, технический | Аккуратный | Современный, с анимацией |
| Поддержка QML | Нет | Нет | Да |
Коротко: Qwt подходит для инженерных и научных приложений с большим объёмом данных. QCustomPlot проще всего подключить и освоить. Qt Charts — официальный модуль, который хорошо выглядит и работает в QML. В Qt 6 также развивается новый модуль Qt Graphs, который постепенно приходит на смену Qt Charts.
Qwt
Qwt — одна из старейших библиотек для графиков в Qt. Она редко обновляется, но стабильно работает, быстро отрисовывает большие массивы точек и содержит много специализированных виджетов: шкалы, циферблаты, термометры, спектрограммы. Внешний вид у графиков строгий и технический, поэтому для «красивой» презентационной графики её обычно не выбирают.
Установка Qwt в Windows
Скачайте архив с исходниками с официального сайта Qwt и распакуйте его. Откройте командную строку в каталоге распаковки. Для шага установки может понадобиться запуск от имени администратора. Для компилятора MinGW выполните:
qmake qwt.pro
mingw32-make
mingw32-make install
Если команды не найдены, проверьте переменную PATH. По умолчанию qmake находится в каталоге Qt\<версия>\mingw<версия>\bin, а mingw32-make — в Qt\Tools\mingw<версия>\bin. После установки файлы библиотеки появятся в каталоге C:\Qwt-6.x.x.
Для компилятора MSVC команды выполняются в командной строке разработчика Visual Studio:
qmake qwt.pro -spec win32-msvc
nmake
nmake install
Установка Qwt в Linux
В Ubuntu и Debian библиотека есть в репозиториях:
sudo apt-get install libqwt-qt5-dev
Минимальный пример Qwt
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
QwtPlot *plot = new QwtPlot(this);
plot->setTitle("y = x²");
QVector<QPointF> points;
for (int i = -50; i <= 50; ++i) {
double x = i / 10.0;
points.append(QPointF(x, x * x));
}
QwtPlotCurve *curve = new QwtPlotCurve("Парабола");
curve->setSamples(points);
curve->attach(plot);
plot->replot();
QCustomPlot
QCustomPlot — самая простая в подключении библиотека. Она состоит всего из двух файлов: qcustomplot.h и qcustomplot.cpp. Скачайте архив на сайте проекта и добавьте оба файла в свой проект. Для работы нужны модули widgets и printsupport:
QT += widgets printsupport
Минимальный пример построения параболы:
#include "qcustomplot.h"
QCustomPlot *plot = new QCustomPlot(this);
QVector<double> x(101), y(101);
for (int i = 0; i < 101; ++i) {
x[i] = i / 50.0 - 1; // от -1 до 1
y[i] = x[i] * x[i];
}
plot->addGraph();
plot->graph(0)->setData(x, y);
plot->xAxis->setLabel("x");
plot->yAxis->setLabel("y");
plot->xAxis->setRange(-1, 1);
plot->yAxis->setRange(0, 1);
plot->replot();
QCustomPlot умеет масштабировать и перемещать график мышью, строить столбчатые диаграммы и цветовые карты, сохранять результат в PNG и PDF. Обратите внимание на лицензию: GPL требует открывать код вашего приложения. Для закрытых проектов нужна коммерческая лицензия.
Qt Charts
Qt Charts — официальный модуль Qt для графиков. Его не нужно скачивать отдельно: достаточно отметить компонент при установке Qt. Графики выглядят современно, поддерживают темы оформления и анимацию, работают и в виджетах, и в QML. На очень больших объёмах данных модуль уступает Qwt и QCustomPlot по скорости.
Подключение в CMake:
find_package(Qt6 REQUIRED COMPONENTS Charts)
target_link_libraries(myapp PRIVATE Qt6::Charts)
Минимальный пример:
#include <QChartView>
#include <QLineSeries>
auto *series = new QLineSeries;
for (int i = -50; i <= 50; ++i) {
double x = i / 10.0;
series->append(x, x * x);
}
auto *chart = new QChart;
chart->addSeries(series);
chart->createDefaultAxes();
chart->setTitle("y = x²");
auto *view = new QChartView(chart);
view->setRenderHint(QPainter::Antialiasing);
setCentralWidget(view);
В Qt 5 классы модуля находились в пространстве имён QtCharts, поэтому в коде добавляли строку using namespace QtCharts;. В Qt 6 это не нужно.
Что выбрать
- Быстро добавить график в небольшой проект — QCustomPlot.
- Научное или инженерное приложение, миллионы точек, специальные виджеты — Qwt.
- Красивые графики, анимация, QML и официальная поддержка — Qt Charts или Qt Graphs.
- Закрытый коммерческий проект — сначала проверьте лицензию выбранной библиотеки.
Заключение
Построить графики в Qt можно разными способами. Qwt проверена временем и быстро работает с большими данными. QCustomPlot подключается за минуту и подходит для большинства задач. Qt Charts даёт современный внешний вид и поддержку QML прямо из коробки. Начните с той библиотеки, которая лучше подходит под ваш проект и лицензию, а для сложных случаев не бойтесь комбинировать подходы.