Pull to refresh

Рисование в QT

Reading time 2 min
Views 8K
QT

Введение

QT — технология для разработки кросс платформенных приложений, реализуемых на языке C++. Компания Nokia выпустила отличную технологию и отличную IDE к ней, которые, на мой взгляд, являются удачным сочетанием простоты написания программ (вам достаточно знать ООП и C++) и одновременной «контролируемости» (доступны все библиотеки для их просмотра). В результате получается оптимизированное приложение, в котором подключено, только то, что необходимо. Конечно в нем нет некоторых готовых реализаций, например события получения фокуса, однако есть все для его реализации.

При изучении QT можно натолкнуться на глобальную проблему реализации графики. А если попробуете искать в Google, то можно найти форум, на котором сидят гуру, и «посылают» в тот же Google, но конечно есть исключения. Макс Шлее пишет в своей замечательной книге об этом, но это больше похоже на нервные наброски. QT Assistant — отличная вещь, но нет готового примера, чтоб просто разобраться. В общем я разобрался благодаря тому, что использовал все три источника и знание ООП. Конечно можно сказать, что при желании можно разобраться легко в этом, но я хочу чтоб человек зашел в Google, набрал «Рисование в QT» и вышел на статью, в которой будет все описано рассказано на примере.

Идеология

В QT не так как в .NET (подключите библиотеку для одного класса и заодно кучу других в подарок и получите машину для поглощения RAM). Идеология в QT следующая: надо создать класс, наследующий public от QWidget. Мы получим класс объекта на котором будем рисовать. Класс можно создать в отдельном заголовочном файле, но я создл его в основном «wigdet.h»:
class canvas : public QWidget {
Q_OBJECT
public:
canvas(QWidget* parent=0):QWidget(parent){}
~canvas(){}
void paintEvent(QPaintEvent*); //вызов метода, который собственно и будет рисовать то, что вы запрограммируете далее
bool par; /* если вы захотите рисовать по событию, например нажатие кнопки изменит значение этого параметра. А потом Вы можете сделать какое-нибудь условие на этот параметр, при выполнении которого будет что-нибудь рисоваться. */

protected:
};


Создание объекта для рисования и программирование метода для рисования

Далее после того, как Вы создали класс, можно приступить к декларации объекта и вызова метода. Все это можно делать где у вас проходят события. У меня это «widget.cpp». Декларацию можно осуществить по какому-нибудь событию или по загрузке программы. Она выглядит следующим обрзом
canvas* wt = new canvas; //не знаю почему не работает canvas* wt = new canvas(ui->tab);
wt=new canvas(ui->tab); //ui->tab_5 является родительским окном, на расположится наш объект
wt->show(); //функция говорит сама за себя
wt->setGeometry(0,210,500,150); // габариты объекта


После создания объекта нам необходимо запрограммировать само рисование, то есть метод void paintEvent(QPaintEvent*). По своей сути он является событием, даже название об этом говорит. Поэтому он программируется отдельно как и любое событие. Желательно его программировать тоже в основном файле с событиями, так как удобно обратиться к объектам GUI. Тут все просто:
void canvas::paintEvent(QPaintEvent *)
{
QPainter img(this);
img.drawLine(0,0,150,75); /* вместо drawLine(0,0,150,75) вы можете вызвать любой метод, который есть в QPainter. */
}
Tags:
Hubs:
-1
Comments 5
Comments Comments 5

Articles