Компания ALT Linux
Опубликован: 07.03.2015 | Доступ: свободный | Студентов: 2137 / 487 | Длительность: 24:14:00

Лекция 15: Разработка приложений с графическим интерфейсом

15.8 Использование сторонних (third party) разработок в собственном проекте

Программная реализация уже существует для множества функциональных возможностей, для большинства распространенных стандартов и для решения большого количества типичных задач. Например, реализация протокола SMTP (Simple Mail Transfer Protocol) для электронной почты или библиотека для быстрого преобразования Фурье, или даже визуальный элемент для вывода графика функции — являются примерами задач, с которыми может сталкиваться разработчик. Поэтому программист может столкнуться с необходимостью исследовать предметную область, спроектировать и разработать собственный вариант решения для них, выполняя работу заново с самого начала, хотя для этих задач уже существует реализация в других программных продуктах (библиотеках, инструментариях, и т. п.).

Использование сторонних разработок в собственном проекте может значительно сократить время создания программы, обогатить функциональные возможности, и, возможно, обеспечить совместимость со стандартами и другими программами, которые уже существуют. Конечно, в таком случае приходится иметь дело с кодом, созданным другим программистом, который может содержать свои собственные особенности, дефекты, требования к выполнению. Но в большинстве случаев (если сторонняя разработка достаточно хорошо протестирована и рассчитана на подобное использование, и поставляется как библиотека или фреймворк) это предоставляет серьезные преимущества, поскольку дает возможность избежать повторного решения задачи, которая была решена другим разработчиком ранее. Особенно это важно для свободного программного обеспечения с открытым кодом, которое на полную мощность пользуется возможностями повторного использования.

Конечно, играет важную роль способ лицензирования программного кода, который будет предоставлять возможности для использования текста или готовой программы в собственных целях. Лицензия может также давать возможность использовать программное обеспечение или его исходный код в коммерческих проектах. Поэтому особенно важно убедиться в лицензионной чистоте кода, который Вы будете использовать в своем проекте и в ограничениях, которые лицензия накладывает на его использование.

В нашем примере мы используем библиотеку Qwt, которая дает дополнительный набор виджетов для вывода графиков, гистограмм, значений, а также несколько дополнительных элементов управления. Исходный код и документацию можно получить на сайте http://qwt.sourceforge.net.

Откроем папку с исходным кодом и файл проекта qwt.pro. Обратите внимание: файл qwt.pro содержит строку

include(qwtconfig.pri)

Файл qwtconfig.pri служит для настройки компиляции Qwt. Для компиляции примеров и тестового проекта для исследования Qwt откомментируйте:

QWT_CONFIG += QwtExamples
QWT_CONFIG += QwtPlayground

Также закомментируйте строку для того, чтобы построить отдельную динамическую библиотеку для Qwt, которую мы будем использовать (эту строку необходимо комментировать только под Windows):

QWT_CONFIG += QwtDesignerSelfContained

Далее отключите Shadow Build и запустите компиляцию в режиме Release. После завершения компиляции мы получим такое размещение файлов :

  • qwt/designer/plugins/designer— расширение для QtDesigner, которое даст нам возможность использовать виджеты Qwt при визуальном проектировании интерфейса;
  • qwt/lib — содержит динамически загружаемую библиотеку Qwt;
  • qwt/src — содержит заголовочные файлы необходимые для разработки;

Создадим в папке нового GUI проекта подпапку и назовем ее 3rdparty. Добавим внутри нее еще одну папку с названием qwt. Наконец создадим внутри qwt еще две папки: lib и include. Внутрь папки lib скопируем содержимое qwt/lib — построенных библиотек qwt. А в папку include скопируем все файлы qwt/src, которые имеют расширение .h. Наконец для удобства создадим файл для включения в проект 3rdparty/qwt/qwt.pri и добавим содержание:

INCLUDEPATH += $$PWD/ include

LIBS += -L$$PWD/ lib
LIBS += -lqwt

Первая строка .pri-файла указывает путь к размещению .h-файлов. Переменная $$PWD хранит значение текущей папки, то есть той, где находится файл qwt.pri. Вторая строка указывает размещение библиотек (- L <путь_к_библиотекам>). Последняя строка указывает на необходимость связывать программу во время компиляции с библиотекой qwt (-l <название_библиотеки>, где название_библиотеки — название файла библиотеки без расширения и префикса lib).

Отметим, что для того чтобы построить проект в Debug режиме необходимо добавить соответствующие (тоже построенные в Debug режиме) библиотеки. То же касается и Release режима.

Теперь добавим этот файл к проекту PlotExample.pro. После строк

QT += core gui
greaterThan (QT_MAJOR_VERSION, 4 ) : QT += widgets

добавим include(3rdparty/qwt/qwt.pri)

Теперь мы можем воспользоваться библиотекой Qwt в проекте. Создадим виджет для графика и добавим его в окно.

#include <QVBoxLayout>
#include <qwt_plot.h>
#include <qwt_plot_canvas.h>
#include <qwt_plot_panner.h>
#include <qwt_plot_magnifier.h>
MainWindow::MainWindow ( QWidget * parent ) : QMainWindow ( parent ), ui(new Ui : :
	MainWindow )
{
ui->setupui( this );
setCentralwidget(new QWidget ); //Центральный виджет
QLayout * lLayout = new QVBoxLayout;
centralwidget( )->set Layout ( lLayout ); //компоновщик для размещения графика
QwtPlot * lPlot = new QwtPlot; //Визуальный элемент — График
lLayout->addWidget ( lPlot );
QwtPlotCanvas * lCanvas = new QwtPlotCanvas ( ); //Объект для отображения
lCanvas->setFrameStyle (QFrame::Box | QFrame::Plain ); //нашего графика
lPlot ->setCanvas ( lCanvas );
lPlot ->setAxisTitle ( QwtPlot::xBottom, " x " ); //Название оси — x
lPlot ->setAxisScale ( QwtPlot::xBottom, -10.0, 10.0 ); //Границы оси x
lPlot ->setAxisTitle ( QwtPlot::yleft, " y " ); //Название оси — y
lPlot ->setAxisScale ( QwtPlot::yleft, -10.0, 10.0 ); //Границы оси у
new QwtPlotPanner ( lCanvas ); //Добавляем инструмент для перетягивания смещения
//графика указателем мышки
new QwtPlotMagnifier ( lCanvas ); //Добавляем инструмент для увеличения уменьшения
//графика роликом мышки
}

После запуска программы мы увидим пустое окно графика на экране (рис. 15.13).

Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?