Библиотека Qt
На данной странице представлен авторский конспект лекции «Средства разработки: библиотека Qt» курса лекций «Программирование в Linux». Также доступны аудио- и видеозапись лекции.
Преимущества Qt
- огромный выбор простых в использовании классов
- подробная документация по всей библиотеке и методам работы (best practice)
- классы и инструменты для упрощения разработки: сборки, справки и документации, «рисования» интерфейсов, локализации.
- GPL v3, LGPL
- кроссплатформенность (X Window, Windows, Mac OS)
- расширение посредством подключаемых модулей (plugins): драйвера СУБД, форматы изображений, кодировки, стили оформления и многое другое
- полноценная поддержка многопоточности
- взаимодействие (IPC): шина D-Bus, TCP/IP, общая память, QCOP (для Qt for Embedded Linux)
- инфраструктура автотестирования
мультимедийная среда Phonon и встроенный движок браузера WebKit
инфраструктура вызова объектов через встроенный скриптовый язык (Qt Script базируется на ECMAScript, как и реализации JavaScript)
Состав
В отличие от предыдущих версий Qt (Qt3), Qt4 состоит из небольших библиотек:
QtCore |
общая функциональность без графических классов |
QtGui |
графическая среда |
QtNetwork |
поддержка сети и различных протоколов |
!QtOpenGL |
поддержка графического ускорения OpenGL |
QtSql |
работа с СУБД |
QtSvg |
отрисовка векторной графики в формате SVG |
QtXml |
работа с XML |
Qt3Support |
совместимость с Qt 3 |
QAxContainer |
классы клиента ActiveQt (ActiveX) |
QAxServer |
классы сервера ActiveQt (ActiveX) |
QtAssistant |
классы запуска Qt Assistant |
QtDesigner |
классы расширения и внедрения Qt Designer |
QtUiTools |
классы динамической генерации графического интерфейса |
QtTest |
вспомогательные классы для тестирования |
Объектная модель
Qt расширяет объектную модель С++ следующими возможностями:
- мощным механизмом сигналов-слотов
- свойствами объекта
- событиями и фильтрами событий (общая обработка событий a la callbacks)
- контекстно-зависимыми переводами
- внутренними таймерами
- манипулирование иерархией наследования классов
- управляемыми указателями, содержащими счётчик их использования
- динамическое приведение типов
Объекты
Объекты Qt (созданные с использованием мета-объектов, генерируемых программой moc):
- могут иметь уникальное имя
- имеют место в иерархии объектов (удаляются при удалении родительского объекта)
- могут быть связаны с другими объектами с помощью сигналов и слотов
- поддерживают динамическое изменение набора «свойств» (properties), не заданных явно в определении класса.
Графические возможности Qt
- Полноценная библиотека графических виджетов
- Динамическое размещение виджетов (с автоматическим изменением размеров и положения во время выполнения)
- Динамическое и статическое (uic) подключение форм интерфейса, описанных на XML.
- Механизм отрисовки, одинаковый для экрана и на печать (QPainter):
- Поддержка большинства графических форматов, включая растровые, векторные (SVG) и видео.
- Концепция MVC (Model-View-Controller) для виджетов с данными, предоставление «делегатов» для нестандартной отрисовки
- Поддержка стиля оформления всех виджетов и одиночного заданного.
Контейнеры
- Более простые, чем STL, в использовании контейнеры.
- Можно использовать как итераторы в стиле STL, так и в стиле Java
- Большой выбор предопределённых контейнеров: списки, двунаправленные списки, векторы, стеки, очереди, множества, словари и хэши (в том числе и неуникальными ключами)
- Итератор foreach (variable, container)
Локализация
- Использовать QObject::tr() или QT_TR_NOOP()
- Занесение в файл проекта строк: TRANSLATIONS = app_ln.ts
- Вставка в код объектов QTranslator для загрузки локализации
- Использование lupdate-qt4 для извлечения и обновления файлов перевода
- Перевод в Qt Linguist
- Компиляция файлов посредством lrelease-qt4
Примеры
main.cpp
hello.pro
SOURCES += main.cpp TEMPLATE = app TARGET = hello
Сборка:
qmake-qt4 hello.pro && make && make install