Download - Разработка на Qt и Qt Quick
Александр Труфанов Senior Technical Consultant
Forum Nokia
Qt и Qt Quick возможности и перспективы
май, 2011
© 2011 Nokia
Что такое Qt? • Qt (”кьют”) кроссплатформенный C++ фреймворк для разработки
приложений
– Набор кроссплатформенных API и кроссплатформенный GUI фреймворк
– Библиотека C++ классов
– Средства разработки
• Qt изначально проэктировался как эффективное средство разработки
GUI приложений для десктопных платформ
• Разработан норвежской компанией Trolltech, ставшей частью Nokia в 2008
• Последняя версия 4.7.3
© 2011 Nokia
Краткая история Qt Фокус на мобильных платформах (Symbian, Maemo, MeeGo), мобильные API
Nokia покупает Trolltech, переименование в Qt Development Frameworks
Qt 4.0 – нарушение совместимости приводит к новому KDE 4
Qtopia – платформа для моб. телефонов и PDA
Первый публичный релиз (Qt 0.90)
• Двойная лицензия: коммерческая и
свободная для open source
Решение организовать бизнес
• “Q” красиво смотрелось в шрифте Emacs font.
“t” - toolkit
• Компания: Quasar Technologies (позднее: Trolltech)
Старт разработки
• Потребность в кроссплатформенном инстументарии
создания GUI
Эрик Чамбе-Инг Хавард Норд
© 2011 Nokia
Наиболее известные компании,
применяющие Qt в своих разработках
… и многие, многие другие!
© 2011 Nokia
Лицензии Qt
• LGPL
• Qt можно использовать свободно !
– В отличие от GPL, LGPL позволяет свободно
использовать Qt в коммерческих приложениях с закрытым исходным
кодом
– Исходный код Qt полностью открыт и доступен разработчикам
• Коммерческая версия (Digia)
– Изменения, вносимые в исходный код Qt, не обязательно публиковать
– Поддержка
© 2011 Nokia
Архитектура Qt • Qt имитирует родной стиль при отрисовке UI
– Элементы UI передают оригинальный
look & feel
– Может быть адоптирован разработчиком
• Построе на низкоуровневых API платформы
– Не runtime!
• Кроссплатформенный
– Один код для всех платформ
– Требуется лишь перекомпиляция
© 2011 Nokia
Платформы Windows
Mac OS
Linux / X11
Embedded Linux
Windows CE
Maemo / MeeGo
Symbian (S60)
C++
Java
Python
Ada
Pascal
Perl
PHP
Развивается силами Qt open source сообщества.
Официально не поддерживается Qt Development Frameworks.
© 2011 Nokia
Symbian и Qt
• Qt для Symbian:
– Qt 4.6: Поддержка с S60 3rd. Edition, FP1+ (напр., Nokia N95, E71)
– Qt 4.7.x: Поддержка с S60 5th Edition (сенсорные устройства)
– Установите SDK для вашего устройства, или самое младшее SDK для
устройств, поддержку которых вы желаете обеспечить.
Поддержка Qt Предустановлен
Series 60
1.0
Series 60
2.0
(+ 3 FPs)
S60
3.0
S60
3.1
S60
3.2
S60 5.0
=
Symbian^1
Symbian^2 Symbian^3
=
Symbian platform …
© 2011 Nokia
Smart Installer
• Распространение Qt приложений
для Symbian устройств
– Qt не на всех устройствах
– Решение: инсталляция / апгрейд
по мере необходимости
– Упаковка Smart Installer в дистрибутив
• Скачать
– http://qt.nokia.com/developer/nokia-smart-installer-for-symbian
– Open source!
© 2011 Nokia
Maemo / MeeGo и Qt
• Maemo 5
– UI на базе GTK+
– Qt предустановлен
– Библиотеки Qt : PR1.2(4.6.2), PR1.3 (4.7)
• MeeGo 1.0 N (ранее: Maemo 6)
– Qt заменяет GTK+
– Мульти-тач, поддержка расп. жестов
– GTK и Clutter остаются для совместимости
© 2011 Nokia
Начало разработки на Qt для Symbian и
MeeGo • Скачать Qt SDK 1.1 (релиз от 4 мая) для Win, Nix или Mac
– Средства разработки
• IDE Qt Creator 2.1 + Remote Compiler
• Qt Quick Designer
• Qt Linguist
– Библиотеки Qt 4.7.3
– Qt Mobility 1.1.3
– Симулятор
– Отладка на устройстве
• Qt Quick приложения могут публиковаться в Ovi Store!
© 2011 Nokia
Qt SDK – симулятор
• Симуляция состояния батареи и питания
• Информация об устройстве и
настройка его локализации
• Съемные носители (MMC)
• Информация о сети
• Местоположение
• Импорт контактной книги
• Сообщения (email, SMS)
• Сенсоры (акселерометр, компас)
• Поддержка скриптов
© 2011 Nokia
Service API
Доступ к серверу нотификаций
на стороне Nokia
Используется HTTP REST
интерфейс
Client API
Расположено на
устройстве
Предоставляет интерфейс
для регистрации на
уведомления
Часть Qt SDK
© 2011 Nokia
Релиз Qt Creator 2.2 (4 мая)
• Улучшенная поддержка QML
• Улучшенный Qt Quick Designer
• Отладка смешанного QML\C++
• Поддержка CODA для Symbian
и многое другое...
QML Visual editor
© 2011 Nokia
Qt Mobility
• Qt: Desktop → Mobile
• Потребовались новые API для
– Работы с сенсорами
– Определения местоположения
– Отправки сообщений
– И т.д.
• Qt Mobility: новый кроссплатформенные API для моб. служб
– Реализованы на всех платформах, где это имеет смысл
© 2011 Nokia
Релиз Qt Mobility 1.2 (12 мая)
• Для Symbian и MeeGo
• Новый модуль Connectivity (Bluetooth + NFC)
• Улучшения в Contacts и Multimedia
• Поддержка новых сенсоров в QtSensors
• Большое число багов поправлено
• Дополнительные QML binding‟и для API
http://labs.qt.nokia.com/2011/05/12/qt-mobility-1-2-0-released/
© 2011 Nokia
Qt 4.7
• Qt 4.7: уже доступен!
– Включает в себя Qt Quick
– Интегрирует части Qt Mobility
– Сфокусирован на производительности
• http://qt.nokia.com/developer/qt-roadmap
© 2011 Nokia
Модули Qt
QtCore
QtGui QtNetwork QtSql QtXml
QtOpenGl QtSvg Qt3Support
Phonon
QtWebKit
QtScript
QtXmlPatterns
© 2011 Nokia
Иерархия классов Qt
QLayoutItem QObject QPaintDevice QString
QLayout QWidget QImage
QBoxLayout QDialog
... ... ...
... ... ... ...
Большинство классов
(и все виджеты)
порожены от QObject
© 2011 Nokia
Роль базового класса QObject
• Реализация деревьев объектов и владения ими (нет сборщика мусора)
• События, сигналы/слоты
• Рефлексия (субклассы, потомки, слоты ...)
• Приведение типов (qobject_cast)
• Свойства (Q_Property)
• Таймеры
• Требуется декларация Q_OBJECT и обработка метакомпилятором
© 2011 Nokia
Сигналы и слоты
• Сигналы
– Высылаются по наступлению определенного собтия
– Виджеты Qt: имеют предопредленные сигналы (напр., clicked())
– Можно создавать собственные сигналы
– Могут соединяться со множеством слотов
• Слоты
– Функции, вызываемые в ответ на сигнал
– Виджеты Qt: имеют предопредленные слоты (непр., quit())
– Можно создавать собственные слоты
QObject::connect( spin, SIGNAL( valueChanged(int) ),
slider, SLOT( setValue(int) ) );
© 2011 Nokia
Типы данных
• Обычные типы C++: int, bool, float, char
• Собственные типы: QDate, QTime …
• Последовательные (QList, QVector …) и ассоциативные (QMap …)
контейнеры с Java- и STL-итераторами.
• QString – строки в Unicode.
• QVariant - хранит простые типы данных, может быть расширен.
© 2011 Nokia
Виджеты
• Элементы Ui, способные отображаться на экране и получать события
пользовательского ввода.
• Все порождены от QWidget
• Если имеет предка – отображается в нем как в контейнере, иначе
становиться окном.
• Создаются невидимыми (show())
• Имеют очередность при отображении.
• Имеют стиль, палитру, шрифты и курсор.
© 2011 Nokia
Палитра
• Класс QPalette
• По умолчанию, берется QApplication::palette()
• QApplication::setPalette(), QWidget::setPalette() для изменения
© 2011 Nokia
Стили
• Класс QStyle и его потомки (QWindowsStyle, QMacStyle, QS60Style)
• QWidget::setStyle() QApplication::setStyle()
© 2011 Nokia
Qt Style Sheets
• CSS адаптированный под виджеты
• На базе текущего стиля
• QWidget::setStyleSheet() &
QApplication::setStyleSheet()
• Интергация с Qt Creator
© 2011 Nokia
Создание собственных виджетов
Пол
ьзо
вате
льски
е с
отр
исо
вко
й
че
рез
QP
ain
ter
Ста
нд
артн
ые в
ид
жеты
© 2011 Nokia
QGraphicsView
• Позволяет отображать сцену с множеством элементов
• Элементы: примитивы, изображения (SVG), виджеты
• Элементы реагируют на события, drag&drop, определение столкновений
• Каждый имеет собственную систему координат
• Поддержка трансформаций и масштабирования
• Сцена оптимизирована для отображения
огромного числа элементов
• Поддержка OpenGL
© 2011 Nokia
Эффекты
Source
QGraphicsBlurEffect QGraphicsOpacityEffect
QGraphicsColorizeEffect QGraphicsDropShadowEffect
Применимы как к виджетам, так и к элементам graphic scene
© 2011 Nokia
Фреймворк анимации
• Никаких таймеров
• Основан на изменении свойств объектов (QPropertyAnimation)
• Допускает задание траекторий
• Группировка анимаций (параллельная, последовательная)
• Интеграция с машиной состояний
© 2011 Nokia
Qt Quick (Qt User Interface Creation Kit)
• Создавайте UI как дизайнер
– Без знания C++
– Визуальные инструменты
– Язык QML (расширение JavaScript)
– Модуль: Declarative UI
– Поддержка SVG, XHR, HTML5 Web DB
© 2011 Nokia
QML
• UI описывается структурой элементов
– Значения свойств пересчитываются динамически
– Связь посредством
сигналов и слотов
– Взаимодействие с C++ кодом возможно
– Aнимирование свойст при помощи
состояний и переходов
Rectangle{
width: 200
height: 200
color: "white"
Image {
source: "pics/logo.png"
anchors.centerIn: parent
}
}
© 2011 Nokia
Использование Qt Declarative и QML
• Запуск qml при помощи qmlviewer
• Либо встраивание в Qt приложение:
© 2011 Nokia
Интеграция с С++ кодом
• Возможность создания C++ плагинов для qml
• Взаимодействие при помощи контекстных свойств и объектов:
• Сигналы при изменении свойств контекстных объектов.
• Вызов public слотов и Q_INVOKABLE методов объектов из QML.
• Прямой вызов javascript функций
© 2011 Nokia
Qt Quick Components
http://labs.qt.nokia.com/2011/04/08/qt-quick-
components-for-symbian-technology-preview/
Technical Preview для Symbian:
© 2011 Nokia
Components на ПК
http://www.youtube.com/watch?v=nj5jzv6njKg
© 2011 Nokia
Причины
• Погресс технологий создания UI на протежении последних 3-х лет
(Qt 4.x появился в 2005)
• Дизайн UX (User eXpirience) стал критически важным
• Новые парадигмы UX мобильных устойств возвращаются на ПК
• Код Qt 4.7.x требует реорганизации для развития в новом ключе с
прежней скоростью
© 2011 Nokia
Цели
• Создание приложений с выдющимся UI станет быстрее и проще
• Максимальное использование GPU для ускорения графики во всех
приложениях
• Интеграция с Web технологиями, контентом и сервисами
• Позволить портировать Qt на новые платформы с меньшими затратами
© 2011 Nokia
Решение
• Фокус смещается на QML в качестве UI технологии
• Логика пишется на JS для простоты и ускорения разработки
• C++ в основном для реализации QML плагинов и спец задач
Но:
• Максимальная совместимость с Qt 4.x на уровне исходного кода
В идеале - нужна лишь перекомпиляция
• Сохраняются QWidget'ы
• Qt/C++ может использоваться для всей логики как и раньше
© 2011 Nokia
Как это будет делаться
• Основной фокус на Linux (Wayland, X11), Mac и Windows
Остальное – силами сообщества
• Дифференциация поддержки различных платформ
• Разработка станет более открытой
Уравнивание в правах сообщества и сотрудников Nokia/Trolltech
• Открытое управление, Хостинг вне Nokia
© 2011 Nokia
Что будет?
• Все порты Qt базируются на Lighthouse
– Lighthouse как средство реализации поддержки оконных систем
• Реорганизация графического стека
– Новый scenegraph оптимизированный для QML с подддержкой GL.
– Новые QML item'ы обратно совместимы, но их C++ реализация
(QDeclarativeItem) изменится.
– Шейдерные эффекты в QML коде
– Требование OpenGL ES 2.0 для работы (в т.ч. MESA, ANGLE)
© 2011 Nokia
Что будет?
• Старый QGraphicsView буддет поддерживаться, но не рекомендуется.
• QPainter сохранится в основном для отрисовки документов (WebKit,
text, PDF...)
• Отказ от JavaScriptCore для реализации QtScript в пользу V8 и в QML и в
WebKit
• WebKit(2) - рендеринг в sandbox„е в отдельном потоке или процессе
(скорость, безопасность)
© 2011 Nokia
Модули
• Модуляризация кода Qt - появятся специфичные для платформ
модули (PC/mobile)
• Mobility API интегрируется в модули Qt 5
• Большая часть QtNetwork сливается с QtCore.
• Все что касается QWidget выносится из QtGUI в QtWidgets
• В QtGUI вносится новый SceneGraph и поддержка QWidget'ов на его
базе
• QtWebkit будет независим от QWidget'ов
• Полностью исчезнет Qt3Support
© 2011 Nokia
QML 3D
http://www.youtube.com/watch?v=OXcxFZbKUNI
© 2011 Nokia
Информация
• "The road to Qt 5" Version 0.6, Lars Knoll, 8. May 2011
http://labs.qt.nokia.com/wp-content/uploads/2011/05/Qt5.pdf
• Thoughts about Qt 5. Lars Knoll on May 9, 2011
http://labs.qt.nokia.com/2011/05/09/thoughts-about-qt-5/
• Responses to Qt 5. Lars Knoll on May 11, 2011
http://labs.qt.nokia.com/2011/05/11/responses-to-qt-5/
• Meego Conf in San Francisco, May 23-25 – live streaming
“Beta quality code available towards the end of 2011. Final release in 2012”