Макс Шлее Qt4. Профессиональное программирование на C++ Спб,
Макс Шлее Qt4. Профессиональное программирование на C++ Спб, БХВ, 2007
Qt4 1. Платформо независимая библиотека (фирма Trolltech), полностью объектно-ориентированная библиотека. Может использоваться не только с С++, но с Java, Python,C# и др. 2. Компактный и эффективный код 3. Быстро развивающаяся
Qt4 3.Использует функции API низкого уровня, что позволяет писать такие же эффективные программы, как и специально разработанные под конкретную систему Для ускорения и упрощения разработки интерфейса Qt предоставляет Qt Desinger
Qt4 Qt4 использовалась для разработки -Skype, Photoshop, Opera Qt предоставляет полный инструментарий для программиста и поддерживает платформонезависимое программирование на OpenGL, поддержку формата XML, STL -совместимую библиотеку
Qt4 -первая программа #include
Qt4 — первая программа 1. Создаем каталог qt4_ex1 2. В нем файл qt4_ex1.cpp с программой «Hello Word!» 3. Устанавливаем каталог qt4_ex1 текущим и выполняем следующие команды.
qmake -project qmake make Команда qmake -project создаёт файл проекта, присваивает ему по умолчанию имя каталога, в котором проект находится, и включает в него все файлы исходного кода, находящиеся в этом каталоге. Команда qmake формирует из файла проекта обычный make-файл. А команда make – исполняемую программу. Запустим её.
#include
lbl.show ( ); // для отображения элементов управления return app.exec ( ); // запуск приложения - запускается цикл обработки событий - передает получаемые от системы события на обработку соответствующим объектам Метод exec ( ) возвращает значение целого типа, содержащее код, информирующий о завершении приложения
Библиотека Qt содержит около 400 классов Библиотека Qt разбита на модули QtCore QtGui QtOpenGL QtScript QtXml И др. Существует некоторая зависимость модулей друг от друга.
Qt4 Наиболее значимым является модуль QtCore, он является базовым и от него зависят модули QtGui, QtSql, QtXml, QtNetwork и т.д. Для каждого модуля Qt4 предоставляет отдельный заголовочный файл с соответствующим названием
Модуль QtCore Модуль QtCore содержит 200 классов: контейнерные классы, классы ввода-вывода, классы работы с таймером, датой и временем и др. Используется для создания консольных приложений.
Модуль QtGui Модуль QtGui cодержит 500 классов для организации графического интерфейса пользователя: Класс QWidget — базовый класс для всех элементов управления (254 метода) Классы элементов отображения Qlabel Классы для рисования Qpaiter, Qbrash, Qpen и др.
Класс QApplications Класс QApplications, который представляет цикл событий от клавиатуры, мыши, таймера и др. Класс QApplications определяет стиль окна, получает указатель на объект рабочего стола, управляет доступом к буферу обмена, манипулятором «мышь», инициирует настройки приложения (палитру элементов управления) и др.
В основе библиотеки Qt лежит объектно-ориентированное программирование. Основным классом является QObject . Подавляющее большинство классов являются его наследниками.
Механизм сигналов и слотов Для библиотеки Qt проведено расширение языка С++. Решение этой проблемы проводится с помощью специального препроцессора МОС (Meta Object Compiler, метаобъектный компилятор). Он анализирует классы на наличие специального макроса Q_Object и внедряет всю необходимую информацию автоматически ( без участия разработчика) в специальный файл.
Механизм сигналов и слотов Макрос внедряют в класс, когда необходима информация о его свойствах. Для этого используется механизм сигналов и слотов (аналог механизма обратного вызова в Window). Он позволяет объединить вместе объекты несвязанные друг с другом. Объект — телефон послал сигнал - звонок; Объект — человек отреагировал слотом — снял трубку.
Механизм сигналов и слотов Сигнал — метод, позволяющий производить посылку сообщений. Причиной этому может быть изменение состояния управляющего объекта, например нажатие кнопки. Сигналы в классе определяются обычными методами, но только без реализации, т.е. прототипами. Сигналы не всегда соединяются со слотами, т.е. они могут не обрабатываться.
Механизм сигналов и слотов Таким образом реализуется компонентно-ориентированный подход. Библиотека предоставляет готовые сигналы, но можно разработать свой. Вызвать сигнал можно с помощью ключевого слова emit, сигналы играют роль вызывающих функций.
Механизм сигналов и слотов Слоты — это методы, присоединяемые к сигналам. Они описываются в функции как обычные методы, только они должны иметь возможность принимать сигнал.
int main (int argc, char** argv) { QApplication app (argc, argv); QLabel lbl ("0"); QPushButton cmd ("ADD"); Counter counter; lbl.show(); cmd.show();
QObject::connect (&cmd, SIGNAL (clicked( )), &counter, SLOT ( slotInc( )) ); QObject::connect(&counter, SIGNAL(counterChanged(int)), &lbl, SLOT(setNum(int)) ); QObject::connect(&counter, SIGNAL(goodbye()), &app, SLOT(quit( )) ); return app.exec( ); }
В главной функции создается объект надписи lbl, кнопка нажатия cmd и объект счетчика counter. Далее производится соединение сигнала clicked() со слотом slotInc(). Элемент надписи изображает всегда актуальное значение за счет сигнала counterChanged(int), передающего в парметре значение счетчика и соединяемого со слотом setNum(int)
Далее соединяется сигнал goodbye() со слотом quit(), отвечающим за завершение работы приложения после нажатия кнопки ADD в пятый раз.
void Counter::slotInc() { emit counterChanged(++m_nValue); if (m_nValue == 5) { emit goodbye(); } }
class Counter : public QObject { Q_OBJECT private: int m_nValue; public: Counter(); public slots: void slotInc(); signals: void goodbye ( ); void counterChanged (int); };
Механизм сигналов и слотов Объект высылающий сигнал может не беспокоится о том, как этот сигнал будет обрабатываться. Методы, организующие посылку сигнала и обработку сигнала не зависят друг от друга. Это позволяет разбивать проект на компоненты и работать группой программистов.
Механизм сигналов и слотов Код программы становится гибким, легко расширяемым и модифицируемым, а приложения компонентно-ориентированными. Сигнал может быть соединен с большим количеством слотов. Слот может быть соединен с большим количеством сигналов.
Механизм сигналов и слотов Методы сигналов в определении классов обозначаются с помощью слова signals, а методы слота — slots. Соединение объектов производится с помощью метода connect, а разъединение — disconnect При этом методы слотов являются обычными методами, а методы сигналов реализуются с помощью МОС МОС распознает классы нуждающиеся в обработке по содержанию в классе макроса Q_OBJECT
Элементы управления Практически любая программа имеет графический интерфейс пользователя (GUI) Виджеты или элементы управления являются строительными конструкциями для их создания Элементы управления — кнопки, меню, диалоговые окна, не только как некоторая область отображаемая на экране, но выполняющая действия, реагирующая на сигналы и получающая сигналы.
Элементы управления Можно создавать собственные элементы управления, наследуя классы уже существующих элементов. В Qt существует иерархия классов для элементов управления, основным в которой является Qwidget. Он содержит 254 метода, определяющих размеры, местоположение, обработку событий и т.д.
Элементы управления В Qt нет разделения между виджетами и контейнерами.
int main(int argc, char** argv) { QApplication app(argc, argv); QWidget wgt; QWidget* pwgt1 = new QWidget(&wgt); QPalette pal1; pal1.setColor(pwgt1->backgroundRole(), Qt::blue); pwgt1->setPalette(pal1); pwgt1->resize(100, 100); pwgt1->move(25, 25); pwgt1->setAutoFillBackground(true);
QWidget* pwgt2 = new QWidget(&wgt); QPalette pal2; pal2.setBrush(pwgt2->backgroundRole(), QBrush(QPixmap("stone.jpg"))); pwgt2->setPalette(pal2); pwgt2->resize(100, 100); pwgt2->move(75, 75); pwgt2->setAutoFillBackground(true); wgt.resize(200, 200); wgt.show(); return app.exec(); }
Расположение виджета можно изменить методом move(), а размеры resize(). pwgt1->setAutoFillBackground(true); виджет заполняется фоном автоматически pwgt1->setPalette(pal1); установка палитры
24882-seans_raboty_qt4.ppt
- Количество слайдов: 38

