Маршрут

  1. 1QML и модели
  2. 2C++ и потоки
  3. 3Android и JNI
  4. 4Профилирование
ЭтапЧто получится
QML и моделиСобрать экран с моделью данных
C++ и потокиСвязать QML и C++ без блокировки интерфейса
Android и JNIРаботать с разрешениями и платформенными API
ПрофилированиеНайти причину задержки и проверить логику

Начните с Qt 6 + Qt Quick/QML + C++: интерфейс на QML, логика на C++, платформенная интеграция отдельно. Desktop Widgets можно изучить позже.

Основа интерфейса

№ 1★ Начните здесь

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.

№ 4★ Начните здесь

Best Practices for QML and Qt Quick

короткий материал с высокой отдачей

Организация проекта, граница UI и бизнес-логики, layouts, повторное использование компонентов, работа с delegates. Особенно полезны не общие пожелания, а конкретные ограничения: например, почему не стоит хранить состояние приложения в делегате списка или одновременно управлять геометрией через Layout и конфликтующие anchors. Читать сразу после первых экранов.

Объекты, потоки и Android

QML and C++ Integration + Writing QML Modules

правильная граница между языками

Разбирать передачу данных и объектов, свойства, методы, регистрацию C++-типов и организацию QML-модулей. Второе руководство связывает это с современной системой сборки. Ценность — в понимании интерфейса между слоями, а не в хаотичном выставлении каждого C++-объекта в QML-контекст.

№ 6★ Начните здесь

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 пригодится платформенный маршрут, перед релизом — безопасность и выпуск.