Download - Разработка на Qt и Qt Quick

Transcript

Александр Труфанов Senior Technical Consultant

Forum Nokia

[email protected]

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

От встраиваемых устройств до

десктопных приложений Компании в различных индустриях

© 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

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

Ovi Notifications API

© 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 4.7

• Qt 4.7: уже доступен!

– Включает в себя Qt Quick

– Интегрирует части Qt Mobility

– Сфокусирован на производительности

• http://qt.nokia.com/developer/qt-roadmap

Кое-что о Qt за 10

минут

© 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)

• Допускает задание траекторий

• Группировка анимаций (параллельная, последовательная)

• Интеграция с машиной состояний

Qt Quick

© 2011 Nokia

Qt Quick (Qt User Interface Creation Kit)

• Создавайте UI как дизайнер

– Без знания C++

– Визуальные инструменты

– Язык QML (расширение JavaScript)

– Модуль: Declarative UI

– Поддержка SVG, XHR, HTML5 Web DB

© 2011 Nokia

http://www.youtube.com/watch?v=G5Q4mrq2hl8

© 2011 Nokia

Photoshop to QML exporter

© 2011 Nokia

Кроссплатформенность Qt Quick

Windows 7

Symbian^3 Simulator

Maemo / MeeGo

© 2011 Nokia

http://www.youtube.com/watch?v=23qJoxQEvVg

© 2011 Nokia

QML

• UI описывается структурой элементов

– Значения свойств пересчитываются динамически

– Связь посредством

сигналов и слотов

– Взаимодействие с C++ кодом возможно

– Aнимирование свойст при помощи

состояний и переходов

Rectangle{

width: 200

height: 200

color: "white"

Image {

source: "pics/logo.png"

anchors.centerIn: parent

}

}

© 2011 Nokia

QML – мета-объектный язык Qt

10 LOC

130 LOC

© 2011 Nokia

QML – мета-объектный язык Qt

© 2011 Nokia

Использование Qt Declarative и QML

• Запуск qml при помощи qmlviewer

• Либо встраивание в Qt приложение:

© 2011 Nokia

Интеграция с существующим UI

• UI на основе QWidget

• UI на основе QGraphicsView:

© 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

Qt 5.x

© 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)

V#-Filename.ppt / 5/30/2011© 2009 Nokia 54

© 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”

© 2011 Nokia

Вопросы