Russian Qt Forum
Декабрь 18, 2017, 02:11 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Урок: Библиотека QWT. Простое приложение, использующее QWT. (Урок 1)  (Прочитано 30531 раз)
_Vitaliy_
Самовар
**
Offline Offline

Сообщений: 105


Просмотр профиля
« : Декабрь 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.

При запуске программы выбираем "файл-открыть".  Потом выбираем "просмотр-обработка".
Если мышкой изменить размер открытого окна, размер области рисования останется неизменным, что есть не совсем хорошо. Исправить этот недостаток постараемся в следующем уроке, а также добавим скроллинг.
« Последнее редактирование: Май 19, 2010, 08:36 от xintrea » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3822


Просмотр профиля WWW
« Ответ #1 : Декабрь 17, 2009, 20:25 »

_Vitaliy_, обрати внимание на то, что здесь есть Вики: http://www.prog.org.ru/wiki
там статьи самое то писать, можно редактировать, откатывать правки и т.п. А коментировать/обсуждать предметную часть статьи удобнее на форуме.
Записан

Юра.
_Vitaliy_
Самовар
**
Offline Offline

Сообщений: 105


Просмотр профиля
« Ответ #2 : Декабрь 17, 2009, 20:44 »

Я думал чтобы здесь полностью обкатать и разобраться с вопросом, а потом если у знатоков претензий нет выложить на вики.
Записан
xintrea
Moderator
Супер активный житель
*****
Offline Offline

Сообщений: 700



Просмотр профиля WWW
« Ответ #3 : Декабрь 17, 2009, 22:30 »

Я думал чтобы здесь полностью обкатать и разобраться с вопросом, а потом если у знатоков претензий нет выложить на вики.

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

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

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

Собираю информацию по крупицам
http://webhamster.ru
Rcus
Гость
« Ответ #4 : Декабрь 18, 2009, 04:53 »

За использование абсолютных путей в файлах проекта нужно ... до просветления, потому что мало того что это не портабельно между осями, так и собираться будет только на одной машине. Более того, если нужно собирать несколько разных конфигураций (например host/X11, host/qws, cross/qws) то это опять будет мешать.
Записан
_Vitaliy_
Самовар
**
Offline Offline

Сообщений: 105


Просмотр профиля
« Ответ #5 : Декабрь 18, 2009, 08:24 »

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

Qt версия 4.5.2., указал в начале урока.
Записан
Rcus
Гость
« Ответ #6 : Декабрь 18, 2009, 09:51 »

Есть разные способы передать параметры в проект сборки, самый просто это переменные окружения.
Записан
SABROG
Гость
« Ответ #7 : Январь 06, 2010, 15:40 »

Переменную можно еще через qmake передать. Просто тогда нужно в файлике README или INSTALL написать, мол пользователь такой то командой укажи путь к qwt. А еще лучше сообщение вывести типа QWT не найден по указонному пути, читайте README/INSTALL как указать путь вручную.
Записан
p166
Чайник
*
Offline Offline

Сообщений: 59


Просмотр профиля
« Ответ #8 : Февраль 25, 2010, 15:53 »

_Vitaliy_
Сделал все как написано, не вышло. Попробывал откомпилировать Ваш пример, но в файле obrabotka.cpp при вызове setModel() программа вываливается с ошибкой Segmentation Fault на строке
QwtPlot *myPlot = new QwtPlot(this);

Записан
_Vitaliy_
Самовар
**
Offline Offline

Сообщений: 105


Просмотр профиля
« Ответ #9 : Февраль 25, 2010, 19:55 »

а примеры кьювт идут?
Записан
p166
Чайник
*
Offline Offline

Сообщений: 59


Просмотр профиля
« Ответ #10 : Февраль 26, 2010, 08:39 »

Сегодня всё переустановил, настроил QT, QWT, QWT Polar, все примеры отлично компилятся и запускаются, но однако ошибка в QwtPlot *myPlot = new QwtPlot(this) так и осталась. Пробовал пример из второго урока - результат тот же самый.
Записан
_Vitaliy_
Самовар
**
Offline Offline

Сообщений: 105


Просмотр профиля
« Ответ #11 : Февраль 26, 2010, 19:03 »

мои примеры практически целиком используют стандартные примеры из кьювт, отсебятина там только модель и пояснения...
Записан
p166
Чайник
*
Offline Offline

Сообщений: 59


Просмотр профиля
« Ответ #12 : Февраль 26, 2010, 20:38 »

кхм.... *чешет репу*
Попробую собрать QWT в разных режимах - release and/or debug, может проймет наконец Улыбающийся
Но все равно большое спасибо за урок, во многом он для меня был познавательным! С нетерпением буду ждать 3-ей части!
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 667



Просмотр профиля
« Ответ #13 : Март 24, 2010, 22:33 »

2. Добавить в файл проекта *.pro такие строки:
Ага. А ничего что не все юзают creator??
Записан

kubuntu/Win7/x64/NetBeans
niXman
Гость
« Ответ #14 : Март 24, 2010, 22:48 »

Цитировать
Ага. А ничего что не все юзают creator??
во первых - QtCreator, родная среда разработки для Qt.
во вторых - писать для всех IDE, не реально.
в третьих - возьмите и напишите статью по еще какую-то IDE. полезно.

а на ваш вопрос, ответ - бывает.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.092 секунд. Запросов: 23.