Введение в программирование с использованием библиотеки Qt
История 1994 – основана компания Trolltech, разработаны версии под Unix и Windows 1997 – библиотека Qt 1.2 легла в основу среды KDE 2000 – Qtopia Core (затем Qt/Embedded) для Embedded Linux 2001 – вышла Qt 3.0 для Unix, Linux, Mac и Windows 2005 – Qt – Trolltech Nokia
Примеры приложений KDE Skype Google Earth
Поддерживаемые платформы Unix, Linux (десктопные и мобильные версии с графической подсистемой X11) Windows XP, Vista, 7 Windows Mobile Mac OS X Android iOS (в процессе портирования)
Поддерживаемые языки C++ - язык самой библиотеки Python Ruby Java PHP
Модули библиотеки QtCore QtGui QtNetwork QtOpenGL QtSql QtXml QtMultimedia QtTest
Модуль QtCore контейнерные классы QVector,QList,QMap классы ввода-вывода QIODevice, QFile, QDataStream классы для работы с потоками и процесами QProcess, QThread, QMutex, QSemaphore классы для работы с датой и временем QDate, QTime, QDateTime QLocale QEvent QObject
Объектная модель Qt Объекты образуют иерархию по принципу родитель-ребенок Объект содержит всю информацию о себе Объекты соединяются с помощью механизма слотов-сигналов Объекты обрабатывают события Объекты обладают свойствами //pr1
Правила соединения сигналов и слотов Отношения многие ко многим Можно соединять сигнал с сигналом Количество аргументов слота
Рекомендации по использованию объектной модели не использовать иерархию объектов для доступа к защищенным полям класса не использовать сигналы и слоты в местах, где критична производительность использовать qobject_cast для преобразования типов указателей на объекты
Контейнерные классы Последовательные – вектор (QVector), список (QList и QLinkedList), стек (QStack) и очередь (QQueue) Ассоциативные – множество (QSet), словарь (QMap и QMultiMap), хэш (QHash и QMultiHash)
Работа с контейнерными классами по индексу для последовательных контейнеров по ключу для ассоциативных контейнеров итераторы в стиле Java и C++ foreach ! при входе в цикл происходит копирование всего контейнера
Устройства ввода-вывода Файл Сокет Буфер Процесс
Обработка сообщений QCoreApplication::exec() QThread::exec() QEventLoop::exec()
Графический интерфейс пользователя в Qt Базовый класс – QWidget, наследник QObject и класса QPaintDevice QPaintDevice - холст для рисования Основные задачи класса QWidget управление геометрией обработка событий графической системы управление поведением окна с помощью флагов изменение курсора Каждый виджет может быть окном
Ограничение графической подсистемы Нельзя производить непосредственное взаимодействие с виджетом из другого потока. Нужно: использовать слот-сигнальные соединения использовать пользовательские события
Наиболее интересные библиотечные виджеты QMainWindow QDialog QFrame QStackedWidget QScrollArea
События События клавиатуры События мыши События перерисовки События таймера События перетаскивания
Управление обработкой событий qApp->sendEvent() и qApp->postEvent() qApp->processEvents() QObject::installEventFilter()
Контекст рисования QPainter QPaintEngine QPaintDevice QWidget QImage, QPixmap, QBitmap, QGLPixelBuffer QPicture QPrinter
Перья и кисти Перо (QPen) – определяет цвет и стиль линий Кисть (QBrush) – определяет цвет и стиль заполнения контуров //pr2
Градиенты Линейный, конический и радиальный градиенты (QLinearGradient, QConicalGradient и QRadialGradient) градиенты можно устанавливать в качестве кистей
Управление размещением виджетов QLayout QVBoxLayout, QHBoxLayout, QGridLayout, QStackedLayout //pr4
Концепция модель- представление модель представление выделение делегат
Модели QAbstractItemModel – иерархия таблиц QAbstractListModel QStringListModel QDirModel QAbstractProxyModel QSortFilterProxyModel QStandartItemModel QAbstractTableModel QSqlQueryModel QSqlTableModel QSqlRelationalTableModel
Представления QAbstractItemView QHeaderView QListView QTableView QTreeView
Использование OpenGL в Qt QGLWidget – автоматически активируется аппаратное ускорение 2d графики в paintEvent //pr5
Использование механизма widget-controller причина использования – возможность удаления виджета механизм использование QPointer в контроллере определение операции widget() в контроллере //pr6
Внутренние ресурсы Qt Файл.qrc Q_INIT_RESOURCE путь начинается с :/ //pr7
Источники информации 1. Макс Шлее. Qt4. Профессиональное программирование на C++ Документация