Russian Qt Forum

Qt => Уроки и статьи => Тема начата: _Vitaliy_ от Декабрь 17, 2009, 20:01



Название: Урок: Библиотека QWT. Простое приложение, использующее QWT. (Урок 1)
Отправлено: _Vitaliy_ от Декабрь 17, 2009, 20:01
В данном уроке мы создадим простое приложение по выводу двух графиков и продемонстрируем использование базового функционала данной библиотеки.

Урок был создан и протестирован на Qt версии 4.5.2. и Qwt версии 5.2.0.

Первое что вы должны сделать при создании нового проекта, это:

1. Скопировать из C:\qwt-5.2.0\lib файл qwt5.dll или qwtd5.dll (в зависимости от сборки) в рабочую директорию программы проекта.

2. Добавить в файл проекта *.pro такие строки:

Код:
INCLUDEPATH += C:\qwt-5.2.0\src
LIBS += C:\qwt-5.2.0\lib\libqwtd5.a

Всё, библиотека подключена и готова к использованию.

Далее в заголовочном модуле (*.h где используется Qt) мы должны подключить те заголовочные файлы QWT, функционал которых хотим использовать. В нашем примере это:

Код
C++ (Qt)
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
 

Далее, в том месте где хотим использовать qwt, пишем:

Код
C++ (Qt)
// Подготовка данных Х0, Х1, Х2
// Size- колличество данных
...
 
// Создается область рисования и инициализируется ссылка на нее
QwtPlot *myPlot = new QwtPlot(this);
 
// Создается первая линия
QwtPlotCurve *curve1 = new QwtPlotCurve("H ot T");
curve1->setRenderHint(QwtPlotItem::RenderAntialiased); // Устанавливается параметр сглаживания для этой кривой
 
// Создается вторая линия
QwtPlotCurve *curve2 = new QwtPlotCurve("Curve 2");
 
// В области рисования обозначаются оси координат
myPlot->setAxisTitle(QwtPlot::xBottom, "data 1/seconds"); // Подпись горизонтальной оси
myPlot->setAxisScale(QwtPlot::xBottom, 0, 1000); // Масштаб горизонтальной оси
myPlot->setAxisTitle(QwtPlot::yLeft, "data 2/seconds"); // Подпись вертикальной оси
 
// Устанавливается цвет для второй линии
curve2->setPen(QPen(Qt::blue));
 
// Задается геометрия линий, согласно заранее подготовленным данным
curve1->setData(X0,X1,Size);
curve2->setData(X0,X2,Size);
 
// Линии размещаются на области рисования
curve1->attach(myPlot);
urve2->attach(myPlot);
 
// И наконец, обновляется область рисования
myPlot->resize(800, 600); // Устанавливается размер области рисования
myPlot->replot(); // Область рисования перерисовывается
...
 

Код довольно прозрачный и дополнительных пояснений практически не требует. Единственное следует обратить внимание на то, что тип переменных X0, X1, X2, X3 - double;

Пример приклеплен в аттаче. Файл данных dat.dat находится в папке */dannie.

При запуске программы выбираем "файл-открыть".  Потом выбираем "просмотр-обработка".
Если мышкой изменить размер открытого окна, размер области рисования останется неизменным, что есть не совсем хорошо. Исправить этот недостаток постараемся в следующем уроке, а также добавим скроллинг.


Название: Re: Урок 1 Простое приложение использующее библиотеку qwt
Отправлено: lit-uriy от Декабрь 17, 2009, 20:25
_Vitaliy_, обрати внимание на то, что здесь есть Вики: http://www.prog.org.ru/wiki
там статьи самое то писать, можно редактировать, откатывать правки и т.п. А коментировать/обсуждать предметную часть статьи удобнее на форуме.


Название: Re: Урок 1 Простое приложение использующее библиотеку qwt
Отправлено: _Vitaliy_ от Декабрь 17, 2009, 20:44
Я думал чтобы здесь полностью обкатать и разобраться с вопросом, а потом если у знатоков претензий нет выложить на вики.


Название: Re: Урок 1 Простое приложение использующее библиотеку qwt
Отправлено: xintrea от Декабрь 17, 2009, 22:30
Я думал чтобы здесь полностью обкатать и разобраться с вопросом, а потом если у знатоков претензий нет выложить на вики.

Вы все правильно сделали, этот раздел как раз для уроков и HOWTO.

Я немного подправлю текст.

Просьба указать, какая версия Qt используется.


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: Rcus от Декабрь 18, 2009, 04:53
За использование абсолютных путей в файлах проекта нужно ... до просветления, потому что мало того что это не портабельно между осями, так и собираться будет только на одной машине. Более того, если нужно собирать несколько разных конфигураций (например host/X11, host/qws, cross/qws) то это опять будет мешать.


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: _Vitaliy_ от Декабрь 18, 2009, 08:24
Цитировать
За использование абсолютных путей в файлах проекта нужно ...
и
Цитировать
это не портабельно между осями
прошу тогда поправить, нужно облегчать жизнь программиста.
Цитировать
Просьба указать, какая версия Qt используется

Qt версия 4.5.2., указал в начале урока.


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: Rcus от Декабрь 18, 2009, 09:51
Есть разные способы передать параметры в проект сборки, самый просто это переменные окружения.


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: SABROG от Январь 06, 2010, 15:40
Переменную можно еще через qmake передать. Просто тогда нужно в файлике README или INSTALL написать, мол пользователь такой то командой укажи путь к qwt. А еще лучше сообщение вывести типа QWT не найден по указонному пути, читайте README/INSTALL как указать путь вручную.


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: p166 от Февраль 25, 2010, 15:53
_Vitaliy_
Сделал все как написано, не вышло. Попробывал откомпилировать Ваш пример, но в файле obrabotka.cpp при вызове setModel() программа вываливается с ошибкой Segmentation Fault на строке
QwtPlot *myPlot = new QwtPlot(this);



Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: _Vitaliy_ от Февраль 25, 2010, 19:55
а примеры кьювт идут?


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: p166 от Февраль 26, 2010, 08:39
Сегодня всё переустановил, настроил QT, QWT, QWT Polar, все примеры отлично компилятся и запускаются, но однако ошибка в QwtPlot *myPlot = new QwtPlot(this) так и осталась. Пробовал пример из второго урока - результат тот же самый.


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: _Vitaliy_ от Февраль 26, 2010, 19:03
мои примеры практически целиком используют стандартные примеры из кьювт, отсебятина там только модель и пояснения...


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: p166 от Февраль 26, 2010, 20:38
кхм.... *чешет репу*
Попробую собрать QWT в разных режимах - release and/or debug, может проймет наконец :)
Но все равно большое спасибо за урок, во многом он для меня был познавательным! С нетерпением буду ждать 3-ей части!


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: serg_hd от Март 24, 2010, 22:33
2. Добавить в файл проекта *.pro такие строки:
Ага. А ничего что не все юзают creator??


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: niXman от Март 24, 2010, 22:48
Цитировать
Ага. А ничего что не все юзают creator??
во первых - QtCreator, родная среда разработки для Qt.
во вторых - писать для всех IDE, не реально.
в третьих - возьмите и напишите статью по еще какую-то IDE. полезно.

а на ваш вопрос, ответ - бывает.


Название: Re: Библиотека QWT. Урок 1: Простое приложение, использующее QWT.
Отправлено: serg_hd от Март 29, 2010, 18:42
2. Добавить в файл проекта *.pro такие строки:
Код:
INCLUDEPATH += C:\qwt-5.2.0\src
LIBS += C:\qwt-5.2.0\lib\libqwtd5.a
Добавлю от себя по отношению к netbeans.
Для release-сборки: правая кнопка на проекте ->  properties -> linker -> Add Library file -> <полный путь>libqwt5.a
Для debug: правая кнопка на проекте ->  properties -> linker -> Add Library file -> <полный путь>libqwtd5.a
И одинаково для обоих нужно подключить: правая кнопка на проекте ->  properties -> Include Derictories -> и добавляем вышеуказанный путь до сырцов qwt "<полный путь>/src".
Но при большом желании можно проделать вышесказанное тоже вручную. Для этого находим в каталоге nbproject проекта файлы qt-Debug.pro и qt-Release.pro. Туда и вписываем то же, что пишется в creator'е.


Название: Re: Урок: Библиотека QWT. Простое приложение, использующее QWT. (Урок 1)
Отправлено: TheBlade от Май 21, 2010, 11:00
скачал этот проект
изменил пути к либам на свои:
INCLUDEPATH += D:\Qt\qwt-5.2.1\src
LIBS += D:\Qt\qwt-5.2.1\lib\libqwt5.a

не компилируется
Starting E:\Projects\urok_1\debug\status.exe...
E:\Projects\urok_1\debug\status.exe exited with code -1073741515

в чем дело?


Название: Re: Урок: Библиотека QWT. Простое приложение, использующее QWT. (Урок 1)
Отправлено: _Vitaliy_ от Май 21, 2010, 12:24
LIBS += C:\qwt-5.2.0\lib\libqwtd5.a
оно?


Название: Re: Урок: Библиотека QWT. Простое приложение, использующее QWT. (Урок 1)
Отправлено: daimon от Май 25, 2010, 23:08
Всй компилируется только не рисуется график.
qt 4.5.0 commercial VS2008

такое  не создается libqwtd5.a, только есть qwt5.lib


Название: Re: Урок: Библиотека QWT. Простое приложение, использующее QWT. (Урок 1)
Отправлено: nkment от Июль 10, 2011, 20:43
Доброе время суток
Подскажите, как правильно подключить QWT собранную MVS2010

делаю так:

INCLUDEPATH += c:\Qwt-6.0.0\include
LIBS += c:\Qwt-6.0.0\lib\qwt.dll

при добавлении элемента QwtPlot автоматическаи в ui_wiget.h появляется #include "qwt_plot.h" , т.е. include виден

но при компиляции появдяется:
ошибка: undefined reference to `QwtPlot::QwtPlot(QWidget*)'

Использую Qt_SDK_Win_offline и Qwt-6.0.0