Маршрут
- 1QML и модели
- 2C++ и потоки
- 3Android и JNI
- 4Профилирование
| Этап | Что получится |
|---|---|
| QML и модели | Собрать экран с моделью данных |
| C++ и потоки | Связать QML и C++ без блокировки интерфейса |
| Android и JNI | Работать с разрешениями и платформенными API |
| Профилирование | Найти причину задержки и проверить логику |
Начните с Qt 6 + Qt Quick/QML + C++: интерфейс на QML, логика на C++, платформенная интеграция отдельно. Desktop Widgets можно изучить позже.
Основа интерфейса
Qt 6 QML Book
основной системный учебник
Бесплатная онлайн-книга, к которой есть репозиторий с примерами. Особенно ценны главы Model-View-Delegate, Dynamic QML, Networking, Storage и Extending QML with C++: они связывают интерфейс, данные и прикладную логику. Подходит для последовательного изучения. Примеры сборки нужно сверять с документацией своей версии Qt.
Qt Academy
официальный практический курс по частям
В каталоге стоит начать с курсов Creating Qt Quick User Interfaces, Positioners and Layouts, Model View Delegate with QML и Making Connections: Qt Object System and Object Communication. Здесь есть конкретные упражнения и объяснение взаимодействия объектов. Обучение бесплатное, для Academy нужен аккаунт; есть и бесплатная видеоверсия начального QML-курса.
KDAB: Introduction to Qt Quick and QML
подробные инженерные видеолекции
Хороший вариант, когда текст уже прочитан, но нужна последовательная демонстрация bindings, компонентов, моделей и интеграции с C++. Оговорка: серия началась в эпоху Qt 5. Объяснения механики QML полезны и сейчас; настройку проекта, регистрацию типов и Android API нужно сверять с документацией Qt 6.
Best Practices for QML and Qt Quick
короткий материал с высокой отдачей
Организация проекта, граница UI и бизнес-логики, layouts, повторное использование компонентов, работа с delegates. Особенно полезны не общие пожелания, а конкретные ограничения: например, почему не стоит хранить состояние приложения в делегате списка или одновременно управлять геометрией через Layout и конфликтующие anchors. Читать сразу после первых экранов.
Объекты, потоки и Android
QML and C++ Integration + Writing QML Modules
правильная граница между языками
Разбирать передачу данных и объектов, свойства, методы, регистрацию C++-типов и организацию QML-модулей. Второе руководство связывает это с современной системой сборки. Ценность — в понимании интерфейса между слоями, а не в хаотичном выставлении каждого C++-объекта в QML-контекст.
Threads and QObjects
обязательное чтение про потоки
Thread affinity, event loop, moveToThread, queued/direct connections и deleteLater. Ключевой пример: объект QThread живёт не автоматически в том потоке, который запускает его run(). Именно этот документ помогает объяснить «почему слот выполнился не там», проблемы с таймерами, сокетами и уничтожением объектов.
Qt for Android + Platform Notes
точка входа в платформенную часть
Внутри нужны разделы How Qt for Android Works, manifest, командная сборка, deployment и androiddeployqt. Версии JDK/NDK/Gradle брать отсюда для конкретного релиза, а не из случайного туториала. Отдельно полезно знать различие между полноценным Qt-приложением и встраиванием Qt Quick в нативный Android-интерфейс.
QJniObject
выход из Qt в Android API
Читать не только пример вызова Java-метода, но и сигнатуры, время жизни ссылок, обработку исключений и регистрацию native-методов. Это основа для случаев, где нужная возможность есть у Android, но не закрыта удобной Qt-обёрткой. Затем переходить к JNI Tips из Android-раздела ниже.
Application Permissions + Android Services
разрешения и работа вне экрана
Два практических руководства: как проверять/запрашивать разрешения и как организовывать Android service в Qt-приложении. Полезны уже для приложений с камерой, геолокацией или фоновой задачей. Это не замена изучению ограничений Android: наличие Qt-абстракции само по себе не снимает требования платформы.
Качество и настоящие приложения
Qt Quick Performance + QML Profiler
оптимизация по измерениям
Bindings, JavaScript, стоимость создания объектов, списки, делегаты и отрисовка. Читать вместе: первая страница объясняет потенциальные причины, вторая — как увидеть происходящее в профиле. Эти руководства помогают связать симптом с конкретной работой приложения.
Qt Test + Qt Quick Test
тестирование обоих слоёв
Для C++ — тесты логики, QSignalSpy, проверка контрактов моделей через QAbstractItemModelTester; для QML — TestCase, сигналы и взаимодействия с компонентами. Особенно полезно изучать тесты моделей: визуально список может выглядеть нормально, пока нарушение модельного контракта не проявится при обновлении данных.
GammaRay + clazy
изучение Qt через инструменты
GammaRay позволяет инспектировать Qt-приложение и его объекты; clazy ищет специфические для Qt проблемы статическим анализом. Это не два очередных курса, а способ увидеть последствия собственных решений. GammaRay удобно осваивать на desktop-сборке общей части приложения; не стоит подразумевать одинаково простое подключение ко всем Android-конфигурациям.
Qt Quick Controls: Chat Tutorial
небольшой, но связный разбор приложения
Навигация, списки, адаптивное размещение элементов, C++ SQL-модели и их публикация в QML. Хороший промежуточный материал между «создал кнопку» и чтением большого репозитория. Это учебное приложение с интерфейсом чата и локальными данными, не готовая архитектура production-мессенджера.
Kirigami Tutorial
мобильный и desktop-интерфейс в одном проекте
Руководство KDE по страницам, навигации, спискам, формам, C++-моделям и адаптивному интерфейсу на QML/Qt Quick Controls. Особенно интересен подход к приложениям, которыми пользуются и мышкой, и пальцами. Kirigami — дополнительный набор компонентов поверх Qt, а не обязательная часть любого Qt Android-проекта.
Kasts
исходники настоящего Qt-приложения
Подкаст-клиент KDE на Kirigami; в репозитории есть Android-часть, CMake и CI-конфигурация. После учебника здесь интересно разбирать связь интерфейса, хранения данных, загрузок и воспроизведения. Для сборки лучше брать определённый релиз: README отдельно предупреждает о возможных несовместимых изменениях данных в разработческой ветке.
Дальше
Проверьте поведение приложения при потере сети и закрытии процесса. Для Android пригодится платформенный маршрут, перед релизом — безопасность и выпуск.