Построение графиков

Построение графиков в Qt: Qwt, QCustomPlot и Qt Charts

обновлено 876 просмотров

Введение

Графики нужны во многих приложениях: от простого отображения показаний датчика до научных расчётов и финансовых панелей. В самом Qt долгое время не было готового решения, поэтому сообщество использовало сторонние библиотеки. Сегодня выбор шире, но вопрос «чем строить графики в Qt» по-прежнему задают постоянно. В статье сравним три основных варианта: Qwt, QCustomPlot и официальный модуль Qt Charts, а также разберём установку и минимальные примеры для каждого.

Чем строить графики в Qt: сравнение библиотек

QwtQCustomPlotQt Charts / Qt Graphs
ПодключениеСборка библиотекиДва файла в проектМодуль Qt
ЛицензияQwt License (на основе LGPL)GPL или коммерческаяGPL или коммерческая Qt
Скорость на больших данныхВысокаяВысокаяСредняя
Внешний вид по умолчаниюСтрогий, техническийАккуратныйСовременный, с анимацией
Поддержка QMLНетНетДа
Сравнение библиотек для графиков в Qt

Коротко: 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 прямо из коробки. Начните с той библиотеки, которая лучше подходит под ваш проект и лицензию, а для сложных случаев не бойтесь комбинировать подходы.