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

Подключение QWT к проектам Qt: Windows, Linux, qmake и CMake

обновлено 1 887 просмотров

Введение

Qwt — популярная библиотека для построения графиков и технических виджетов в Qt: шкал, циферблатов, спектрограмм. Собрать её несложно, но на этапе подключения к проекту часто возникают вопросы: как прописать пути, почему виджеты не появляются в дизайнере, как подключить Qwt в Linux. В статье пошагово разберём подключение QWT к проекту Qt в Windows и Linux через qmake и CMake, а также использование QwtPlot в Qt Designer.

Подключение QWT в Windows через qmake

После сборки и установки библиотеки (команды qmake qwt.pro, make, make install) у вас будут каталоги lib и include. Их нужно указать в файле проекта. Удобно скопировать библиотеку в подкаталог qwt рядом с проектом:

win32 {
    CONFIG(release, debug|release): LIBS += -L$$PWD/qwt/lib -lqwt
    else:CONFIG(debug, debug|release): LIBS += -L$$PWD/qwt/lib -lqwtd

    INCLUDEPATH += $$PWD/qwt/include
    DEPENDPATH  += $$PWD/qwt/include
}

Для отладочной сборки используется библиотека с суффиксом d (qwtd), для релизной — без него. Если собирается только один вариант, укажите именно его. Не забудьте при запуске положить qwt.dll (или qwtd.dll) рядом с exe-файлом, иначе программа не стартует.

Подключение через qwt.prf

При установке Qwt копирует файл qwt.prf в каталог установки (features). Если указать путь к нему, подключение сводится к одной строке:

# путь к каталогу features установленной Qwt
QMAKEFEATURES += C:/Qwt-6.3.0/features
CONFIG += qwt

Подключение QWT через CMake

Официального CMake-модуля у Qwt нет, поэтому создадим импортированную цель вручную:

set(QWT_ROOT "${CMAKE_SOURCE_DIR}/qwt")

add_library(Qwt::Qwt SHARED IMPORTED)
set_target_properties(Qwt::Qwt PROPERTIES
    IMPORTED_LOCATION_RELEASE "${QWT_ROOT}/lib/qwt.dll"
    IMPORTED_IMPLIB_RELEASE   "${QWT_ROOT}/lib/libqwt.a"
    IMPORTED_LOCATION_DEBUG   "${QWT_ROOT}/lib/qwtd.dll"
    IMPORTED_IMPLIB_DEBUG     "${QWT_ROOT}/lib/libqwtd.a"
    INTERFACE_INCLUDE_DIRECTORIES "${QWT_ROOT}/include"
    INTERFACE_COMPILE_DEFINITIONS "QWT_DLL"
)

target_link_libraries(myapp PRIVATE Qwt::Qwt Qt6::Widgets Qt6::Svg)

Имена файлов библиотеки зависят от компилятора: для MinGW это libqwt.a, для MSVC — qwt.lib. Макрос QWT_DLL нужен при использовании динамической версии библиотеки.

QwtPlot в Qt Designer

Виджеты Qwt можно размещать на форме в дизайнере. Есть два способа: установить плагин Qwt для Qt Designer или воспользоваться функцией «Преобразовать в…» (promote).

Плагин для дизайнера и MinGW

Плагин дизайнера должен быть собран тем же компилятором, что и сам Qt Creator. Официальные сборки Qt Creator для Windows собираются компилятором MSVC. Поэтому плагин, собранный MinGW, не загрузится в дизайнере. Посмотреть, чем собран Qt Creator, можно в меню «Справка» → «О программе Qt Creator»: в строке «Основан на…» указан компилятор. Если собрать подходящий плагин не получается, используйте преобразование виджета.

Преобразование QWidget в QwtPlot

  • Поместите на форму обычный виджет Widget.
  • Щёлкните по нему правой кнопкой и выберите «Преобразовать в…».
  • Имя базового класса: QWidget.
  • Имя преобразованного класса: QwtPlot.
  • Заголовочный файл: qwt_plot.h (или qwt/qwt_plot.h, в зависимости от путей включения).
  • При желании отметьте «Глобальное включение», нажмите «Добавить», затем «Преобразовать».
Подключение QWT: преобразование QWidget в QwtPlot в Qt Designer
Преобразование виджета в QwtPlot

Соберите проект. При запуске на форме появится пустой график QwtPlot со шкалами:

Пустой график QwtPlot после подключения Qwt к проекту
QwtPlot

В дизайнере вместо графика будет виден серый прямоугольник: это нормально для преобразованных виджетов. Настраивать график (оси, кривые, сетку) нужно в коде.

Подключение QWT в Linux

В Ubuntu и Debian Qwt устанавливается из репозитория вместе с плагином для дизайнера, поэтому все виджеты Qwt сразу доступны на панели элементов:

Виджеты Qwt в панели Qt Designer в Linux
Виджеты Qwt в Linux
sudo apt-get install libqwt-qt5-dev
sudo apt-get install libqt5svg5-dev

В файл проекта добавьте:

unix {
    QT += svg
    LIBS += -lqwt-qt5
    INCLUDEPATH += /usr/include/qwt
    DEPENDPATH  += /usr/include/qwt
}

Обратите внимание на ведущий слеш в пути /usr/include/qwt: без него путь будет считаться относительным и заголовки не найдутся. Модуль svg нужен Qwt для работы с векторной графикой.

Частые ошибки

  • undefined reference при сборке — неверный путь в LIBS или перепутаны отладочная и релизная версии библиотеки.
  • Программа не запускается в Windows — рядом с exe нет qwt.dll.
  • Виджеты не видны в дизайнере — плагин собран не тем компилятором. Используйте «Преобразовать в…».
  • Не найден qwt_plot.h — проверьте INCLUDEPATH и путь в поле «Заголовочный файл».

Заключение

Подключение QWT к проекту Qt сводится к трём шагам: указать путь к заголовкам, подключить библиотеку нужной версии и при необходимости добавить модуль svg. В Windows виджеты удобнее размещать через «Преобразовать в…», а в Linux плагин дизайнера ставится вместе с пакетом. После этого QwtPlot готов к работе.