
Книга посвящена разработке приложений для Windows, macOS, Linux и iOS с использованием библиотеки Qt версии 6.9. Подробно рассмотрены возможности, предоставляемые этой библиотекой, и описаны особенности, выгодно отличающие ее от других библиотек. Описана интегрированная среда разработки Qt Creator и работа с технологией Qt Quick. Книга содержит исчерпывающую информацию о классах Qt 6, и даны практические рекомендации их применения, проиллюстрированные на большом количестве подробно прокомментированных примеров. Отдельно освещена тема искусственного интеллекта и показано, как использовать Qt 6 в эпоху ИИ: от управления ИИ-агентами до промт-инжиниринга с применением облачных и локальных моделей. Проекты и примеры из книги, дополнительные и редко востребованные главы в цифровом формате размещены на сайте издательства.
Для программистов
Платформно-независимая реализация приложений — это уже сегодняшний и завтрашний день программной индустрии. И эта книга станет вашим надежным путеводителем в эру Qt 6 и ИИ-разработки.
Книга подробно знакомит с библиотекой Qt 6.9, являющейся не только средством для создания пользовательских интерфейсов, но и позволяющей разрабатывать приложения практически любой сложности.
Недаром Qt широко используется многими организациями и компаниями, такими как Adobe, Amazon, AMD, Bosch, BMW, Canon, Cisco Systems, Disney, Intel, IBM, Panasonic, Parallels, Pioneer, Philips, Oracle, HP, Google, Mercedes Benz, NASA, NEC, Neonway, Nokia, Rakuten, Samsung, Siemens, Sony, SUN, Tesla, Xerox, Xilinx, Yamaha и др.
Если вы хотите идти в ногу со временем, то вам без этой книги просто не обойтись, поскольку она является исчерпывающим пособием по созданию программ на Qt 6 с использованием C++ и QML.
- Кросс-платформенная реализация приложений для Windows, macOS и Linux
- ИИ-ассистенты, ИИ-IDE, промт-инжиниринг и агентные рабочие процессы: архитектура, код, тесты c локальными и облачными моделями
- Разработка мобильных приложений для iOS
- Программирование 2D- и 3D-графики, мультимедиа, веб-приложений, баз данных, сети, таймера, многопоточности, XML, QML и JavaScript
- Среда разработки Qt Creator и работа с технологией Qt Quick
- 240 завершенных программ и 16 практичных промптов для разработки с ИИ

Макс Шлее (Max Schlee) — закончил Университет прикладных наук в городе Кайзерлаутерн (Германия). Сооснователь компании Neonway по разработке программного обеспечения на Qt. Работал разработчиком программного обеспечения в фирмах THOMSON, Grass Valley, DigitalFilmTechnology, Goober Ltd. и Advancis. Эксперт в области объектно-ориентированного проектирования, специализирующийся на C++ и Qt. Создатель более 50 программ и приложений для Windows, macOS, iOS и Android. Увлечено занимается проектами в области программирования графики, звука и анализа финансовых рынков. Является автором ряда статей, научных докладов на международных конференциях по генеративному программированию пользовательского интерфейса. С 2022 года активно интегрирует современные ИИ-инструменты в процесс разработки: от архитектуры ПО до создания UI/UX прототипов, автоматизации тестирования и генерации контента. Автор книг «Qt 3/4/4.5/4.8/5.3/5.10. Профессиональное программирование на C++» и др. Связаться с автором можно по адресу электронной почты Max.Schlee@neonway.com или через страницу информационной поддержки книги www.qt-book.com.
Книгу “Qt 6.9. Профессиональное программирование на C++” можно купить в нашем интенет-магазине.
Предисловие Маттиаса Эттриха к первому изданию……………………………… 26
Благодарности……………………………………………………………………………………….. 28
Предисловие автора……………………………………………………………………………….. 29
Структура книги………………………………………………………………………………………………………………………… 30
Часть I. Основы Qt……………………………………………………………………………………………………………… 30
Часть II. Элементы управления………………………………………………………………………………………… 31
Часть III. События и взаимодействие с пользователем………………………………………………….. 32
Часть IV. Графика и звук…………………………………………………………………………………………………… 32
Часть V. Создание приложений………………………………………………………………………………………… 33
Часть VI. Особые возможности Qt……………………………………………………………………………………. 34
Часть VII. Язык сценариев JavaScript………………………………………………………………………………. 35
Часть VIII. Технология Qt Quick……………………………………………………………………………………….. 36
Часть IX. Мобильные приложения и Qt……………………………………………………………………………. 37
Часть X. Qt и ИИ…………………………………………………………………………………………………………………. 37
Приложения………………………………………………………………………………………………………………………… 38
Файловый архив…………………………………………………………………………………………………………………. 38
Введение………………………………………………………………………………………………… 39
Часть I. Основы Qt…………………………………………………………………………. 51
Глава 1. Обзор иерархии классов Qt………………………………………………………. 52
Первая программа на Qt……………………………………………………………………………………………………………. 52
Модули Qt…………………………………………………………………………………………………………………………………… 53
Пространство имен Qt……………………………………………………………………………………………………….. 55
Модуль QtCore…………………………………………………………………………………………………………………… 55
Модуль QtGui……………………………………………………………………………………………………………………… 56
Модуль QtWidgets………………………………………………………………………………………………………………. 56
Модули QtQuick и QtQML………………………………………………………………………………………………….. 58
Модуль QtNetwork……………………………………………………………………………………………………………… 58
Модули QtXml…………………………………………………………………………………………………………………….. 58
Модуль QtSql……………………………………………………………………………………………………………………… 58
Модули QtMultimedia и QtMultimediaWidgets…………………………………………………………………. 58
Модуль QtSvg……………………………………………………………………………………………………………………… 59
Дополнительные модули Qt……………………………………………………………………………………………………… 59
Резюме…………………………………………………………………………………………………………………………………………. 60
Глава 2. Философия объектной модели………………………………………………….. 61
Механизм сигналов и слотов……………………………………………………………………………………………………. 64
Сигналы………………………………………………………………………………………………………………………………. 67
Слоты………………………………………………………………………………………………………………………………….. 69
Соединение объектов…………………………………………………………………………………………………………. 70
Новый синтаксис соединений………………………………………………………………………………….. 70
Классический синтаксис соединений……………………………………………………………………… 70
Разъединение объектов……………………………………………………………………………………………………… 75
Переопределение сигналов……………………………………………………………………………………………….. 76
Организация объектных иерархий…………………………………………………………………………………………… 77
Метаобъектная информация…………………………………………………………………………………………………….. 80
Резюме…………………………………………………………………………………………………………………………………………. 80
Глава 3. Работа с Qt……………………………………………………………………………….. 82
Интегрированная среда разработки………………………………………………………………………………………… 82
Программа Qt Assistant……………………………………………………………………………………………………………… 82
Работа с системами сборки………………………………………………………………………………………………………. 84
Работа с CMake………………………………………………………………………………………………………………….. 84
Работа с qmake…………………………………………………………………………………………………………………… 85
Как перейти с qmake на CMake в Qt 6?……………………………………………………………………………. 87
Рекомендации для проекта с Qt………………………………………………………………………………………………… 88
Метаобъектный компилятор MOC…………………………………………………………………………………………… 89
Компилятор ресурсов RCC……………………………………………………………………………………………………….. 90
Структура Qt-проекта……………………………………………………………………………………………………………….. 91
Методы отладки………………………………………………………………………………………………………………………… 91
Прочие методы отладки…………………………………………………………………………………………………….. 92
Глобальные определения Qt…………………………………………………………………………………………………….. 96
Информация о библиотеке Qt……………………………………………………………………………………………………. 97
Резюме…………………………………………………………………………………………………………………………………………. 98
Глава 4. Библиотека контейнеров………………………………………………………… 100
Контейнерные классы……………………………………………………………………………………………………………… 101
Итераторы………………………………………………………………………………………………………………………………… 103
Итераторы в стиле Java…………………………………………………………………………………………………… 103
Итераторы в стиле STL……………………………………………………………………………………………………. 104
Современный стиль итерации с range-based for……………………………………………………………. 105
Использование алгоритмов STL с лямбдами…………………………………………………………………. 106
Ключевое слово foreach………………………………………………………………………………………………….. 106
Последовательные контейнеры……………………………………………………………………………………………… 107
Массив байтов: класс QByteArray…………………………………………………………………………. 108
Массив битов: класс QBitArray……………………………………………………………………………… 109
Списки QList<T>………………………………………………………………………………………………………………. 109
Стек: класс QStack<T>……………………………………………………………………………………………………. 110
Очередь: класс QQueue<T>…………………………………………………………………………………………….. 111
Ассоциативные контейнеры……………………………………………………………………………………………………. 112
Словари QMap<K,T> и QMultiMap<K,T>…………………………………………………………………….. 112
Хеши QHash<K,T> и QMultiHash<K,T>………………………………………………………………………… 114
Множество QSet<T>………………………………………………………………………………………………………… 115
Алгоритмы………………………………………………………………………………………………………………………………… 116
Сортировка……………………………………………………………………………………………………………………….. 117
Поиск…………………………………………………………………………………………………………………………………. 118
Сравнение…………………………………………………………………………………………………………………………. 118
Заполнение значениями…………………………………………………………………………………………………… 118
Копирование значений элементов………………………………………………………………………………….. 119
Подсчет значений…………………………………………………………………………………………………………….. 119
Строки………………………………………………………………………………………………………………………………………. 119
Регулярные выражения……………………………………………………………………………………………………. 121
Произвольный тип: класс QVariant………………………………………………………………………………………… 124
Модель общего использования данных………………………………………………………………………………… 125
Резюме………………………………………………………………………………………………………………………………………. 126
Часть II. Элементы управления………………………………………………. 127
Глава 5. С чего начинаются элементы управления?…………………………….. 128
Класс QWidget………………………………………………………………………………………………………………………….. 128
Размеры и координаты виджета……………………………………………………………………………………… 131
Механизм закулисного хранения…………………………………………………………………………………… 132
Установка фона виджета…………………………………………………………………………………………………. 132
Изменение указателя мыши…………………………………………………………………………………………….. 133
Стек виджетов………………………………………………………………………………………………………………………….. 136
Рамки…………………………………………………………………………………………………………………………………………. 136
Виджет видовой прокрутки…………………………………………………………………………………………………….. 137
Резюме………………………………………………………………………………………………………………………………………. 139
Глава 6. Управление автоматическим размещением элементов……………. 141
Менеджеры компоновки (layout managers)……………………………………………………………………………. 141
Горизонтальное и вертикальное размещение……………………………………………………………….. 143
Класс QBoxLayout…………………………………………………………………………………………………… 143
Горизонтальное размещение QHBoxLayout…………………………………………………………. 145
Вертикальное размещение QVBoxLayout……………………………………………………………… 146
Вложенные размещения………………………………………………………………………………………………….. 147
Табличное размещение QGridLayout……………………………………………………………………………… 148
Размещение в виде формы: класс QFormLayout…………………………………………………………….. 153
Порядок следования табулятора……………………………………………………………………………………………. 154
Разделители: класс QSplitter…………………………………………………………………………………………………… 155
Резюме………………………………………………………………………………………………………………………………………. 156
Глава 7. Элементы отображения…………………………………………………………… 158
Надписи……………………………………………………………………………………………………………………………………. 158
Управление выравниванием текста……………………………………………………………………………….. 158
Отображение HTML-содержимого………………………………………………………………………………… 159
Отображение графической информации……………………………………………………………………….. 160
Взаимодействие с другими виджетами………………………………………………………………………….. 161
Использование гиперссылок…………………………………………………………………………………………… 162
Отображение числовых значений………………………………………………………………………………….. 163
Выделение и копирования текста…………………………………………………………………………………… 163
Индикатор выполнения…………………………………………………………………………………………………………… 163
Индикатор бесконечного выполнения……………………………………………………………………………. 165
Электронный индикатор…………………………………………………………………………………………………………. 166
Ограничения электронного индикатора………………………………………………………………………… 168
Резюме………………………………………………………………………………………………………………………………………. 168
Глава 8. Кнопки, флажки и переключатели…………………………………………. 169
С чего начинаются кнопки? Класс QAbstractButton…………………………………………………………….. 169
Установка текста и изображения……………………………………………………………………………………. 169
Взаимодействие с пользователем…………………………………………………………………………………… 169
Опрос состояния………………………………………………………………………………………………………………. 170
Кнопки………………………………………………………………………………………………………………………………………. 170
Флажки……………………………………………………………………………………………………………………………………… 173
Переключатели………………………………………………………………………………………………………………………… 174
Группировка кнопок………………………………………………………………………………………………………………… 175
Резюме………………………………………………………………………………………………………………………………………. 178
Глава 9. Элементы настройки………………………………………………………………. 180
Класс QAbstractSlider……………………………………………………………………………………………………………… 180
Изменение положения……………………………………………………………………………………………………… 180
Установка диапазона………………………………………………………………………………………………………. 180
Установка шага………………………………………………………………………………………………………………… 181
Установка и получение значений…………………………………………………………………………………… 181
Ползунок…………………………………………………………………………………………………………………………………… 181
Полоса прокрутки……………………………………………………………………………………………………………………. 183
Установщик………………………………………………………………………………………………………………………………. 184
Резюме………………………………………………………………………………………………………………………………………. 185
Глава 10. Элементы ввода……………………………………………………………………. 187
Однострочное текстовое поле………………………………………………………………………………………………… 187
Редактор текста……………………………………………………………………………………………………………………….. 189
Запись в файл……………………………………………………………………………………………………………………. 191
Расцветка синтаксиса (syntax highlighting)…………………………………………………………………….. 192
С чего начинаются виджеты счетчиков?……………………………………………………………………………….. 198
Счетчик……………………………………………………………………………………………………………………………… 199
Элемент ввода даты и времени……………………………………………………………………………………….. 200
Проверка ввода………………………………………………………………………………………………………………………… 200
Резюме………………………………………………………………………………………………………………………………………. 202
Глава 11. Элементы выбора…………………………………………………………………. 203
Простой список………………………………………………………………………………………………………………………… 203
Вставка элементов…………………………………………………………………………………………………………… 203
Выбор элементов пользователем……………………………………………………………………………………. 205
Изменение элементов пользователем…………………………………………………………………………….. 205
Режим пиктограмм……………………………………………………………………………………………………………. 205
Сортировка элементов…………………………………………………………………………………………………….. 206
Иерархические списки…………………………………………………………………………………………………………….. 206
Сортировка элементов…………………………………………………………………………………………………….. 209
Таблицы……………………………………………………………………………………………………………………………………. 210
Выпадающий список……………………………………………………………………………………………………………….. 211
Вкладки…………………………………………………………………………………………………………………………………….. 213
Виджет панели инструментов………………………………………………………………………………………………… 214
Резюме………………………………………………………………………………………………………………………………………. 215
Глава 12. Интервью, или модель-представление…………………………………… 216
Концепция………………………………………………………………………………………………………………………………… 217
Модель………………………………………………………………………………………………………………………………. 218
Представление………………………………………………………………………………………………………………….. 219
Выделение элемента………………………………………………………………………………………………………… 220
Делегат……………………………………………………………………………………………………………………………… 222
Индексы модели……………………………………………………………………………………………………………………….. 224
Иерархические данные……………………………………………………………………………………………………………. 225
Роли элементов………………………………………………………………………………………………………………………… 229
Создание собственных моделей данных……………………………………………………………………………….. 230
Промежуточная модель данных (Proxy model)…………………………………………………………………….. 238
Модель элементно-ориентированных классов…………………………………………………………………….. 240
Резюме………………………………………………………………………………………………………………………………………. 242
Глава 13. Цветовая палитра элементов управления……………………………… 244
Поддержка тёмных тем……………………………………………………………………………………………………………. 247
Резюме………………………………………………………………………………………………………………………………………. 248
Часть III. События и взаимодействие с пользователем. 249
Глава 14. События……………………………………………………………………………….. 250
Переопределение специализированных методов обработки событий………………………………. 252
События клавиатуры……………………………………………………………………………………………………….. 252
Класс QKeyEvent…………………………………………………………………………………………………….. 252
Класс QFocusEvent…………………………………………………………………………………………………. 255
Событие обновления контекста рисования: класс QPaintEvent………………………………….. 255
События мыши…………………………………………………………………………………………………………………. 256
Класс QMouseEvent………………………………………………………………………………………………… 256
Класс QWheelEvent…………………………………………………………………………………………………. 260
Методы enterEvent() и leaveEvent()……………………………………………………………………….. 261
Событие таймера: класс QTimerEvent……………………………………………………………………………. 261
События перетаскивания (drag & drop)………………………………………………………………………….. 261
Класс QDragEnterEvent………………………………………………………………………………………….. 261
Класс QDragLeaveEvent…………………………………………………………………………………………. 262
Класс QDragMoveEvent………………………………………………………………………………………….. 262
Класс QDropEvent…………………………………………………………………………………………………… 262
Остальные классы событий…………………………………………………………………………………………….. 262
Класс QChildEvent………………………………………………………………………………………………….. 262
Класс QCloseEvent………………………………………………………………………………………………….. 262
Класс QHideEvent……………………………………………………………………………………………………. 262
Класс QMoveEvent………………………………………………………………………………………………….. 262
Класс QShowEvent………………………………………………………………………………………………….. 263
Класс QResizeEvent…………………………………………………………………………………………………. 263
Реализация собственных классов событий…………………………………………………………………………… 264
Переопределение метода event()…………………………………………………………………………………………….. 264
Мультитач………………………………………………………………………………………………………………………………… 267
Сохранение работоспособности приложения………………………………………………………………………. 272
Резюме………………………………………………………………………………………………………………………………………. 272
Глава 15. Фильтры событий…………………………………………………………………. 274
Реализация фильтров событий……………………………………………………………………………………………….. 274
Использование лямбда-выражений с фильтрами событий………………………………………………….. 277
Резюме………………………………………………………………………………………………………………………………………. 278
Глава 16. Искусственное создание событий…………………………………………. 279
Резюме………………………………………………………………………………………………………………………………………. 282
Часть IV. Графика и звук…………………………………………………………….. 285
Глава 17. Введение в компьютерную графику……………………………………… 286
Классы геометрии……………………………………………………………………………………………………………………. 286
Точка…………………………………………………………………………………………………………………………………. 286
Двумерный размер…………………………………………………………………………………………………………… 287
Прямоугольник…………………………………………………………………………………………………………………. 289
Прямая линия……………………………………………………………………………………………………………………. 289
Многоугольник…………………………………………………………………………………………………………………. 290
Цвет…………………………………………………………………………………………………………………………………………… 290
Класс QСolor……………………………………………………………………………………………………………………. 291
Цветовая модель RGB……………………………………………………………………………………………………… 291
Цветовая модель HSV………………………………………………………………………………………………………. 292
Цветовая модель HSL………………………………………………………………………………………………………. 294
Цветовая модель CMYK………………………………………………………………………………………………….. 295
Палитра…………………………………………………………………………………………………………………………….. 296
Предопределенные цвета………………………………………………………………………………………………… 296
Резюме………………………………………………………………………………………………………………………………………. 297
Глава 18. Легенда о короле Артуре и контекст рисования……………………. 299
Класс QPainter…………………………………………………………………………………………………………………………. 301
Перья и кисти……………………………………………………………………………………………………………………………. 302
Перо…………………………………………………………………………………………………………………………………… 302
Кисть…………………………………………………………………………………………………………………………………. 303
Градиенты………………………………………………………………………………………………………………………………… 304
Техника сглаживания (Anti-aliasing)………………………………………………………………………………………. 306
Рисование…………………………………………………………………………………………………………………………………. 307
Рисование точек……………………………………………………………………………………………………………….. 308
Рисование линий………………………………………………………………………………………………………………. 308
Рисование сплошных прямоугольников………………………………………………………………………… 309
Рисование заполненных фигур……………………………………………………………………………………….. 310
Запись команд рисования……………………………………………………………………………………………………….. 313
Трансформация систем координат………………………………………………………………………………………… 313
Перемещение…………………………………………………………………………………………………………………….. 314
Масштабирование…………………………………………………………………………………………………………… 314
Поворот…………………………………………………………………………………………………………………………….. 315
Скос…………………………………………………………………………………………………………………………………… 315
Трансформационные матрицы……………………………………………………………………………………….. 315
Графическая траектория (painter path)………………………………………………………………………………….. 316
Отсечения…………………………………………………………………………………………………………………………………. 317
Режим совмещения (composition mode)………………………………………………………………………………….. 318
Графические эффекты……………………………………………………………………………………………………………… 321
Диагностика проблем с рисованием………………………………………………………………………………………. 323
Резюме………………………………………………………………………………………………………………………………………. 323
Глава 19. Растровые изображения………………………………………………………… 325
Форматы графических файлов……………………………………………………………………………………………….. 325
Формат BMP…………………………………………………………………………………………………………………….. 325
Формат GIF……………………………………………………………………………………………………………………….. 326
Формат PNG……………………………………………………………………………………………………………………… 326
Формат JPEG…………………………………………………………………………………………………………………….. 326
Формат WEBP…………………………………………………………………………………………………………………… 326
Формат XPM…………………………………………………………………………………………………………………….. 326
Контекстно-независимое представление………………………………………………………………………………. 328
Класс QImage……………………………………………………………………………………………………………………. 328
Класс QImage как контекст рисования…………………………………………………………………………… 335
Контекстно-зависимое представление…………………………………………………………………………………… 337
Класс QPixmap…………………………………………………………………………………………………………………. 337
Класс QPixmapCache……………………………………………………………………………………………………….. 338
Класс QBitmap………………………………………………………………………………………………………………….. 339
Создание нестандартного окна виджета……………………………………………………………………….. 339
Резюме………………………………………………………………………………………………………………………………………. 341
Глава 20. Работа со шрифтами……………………………………………………………… 342
Отображение строки……………………………………………………………………………………………………………….. 344
Резюме………………………………………………………………………………………………………………………………………. 347
Глава 21. Графическое представление………………………………………………….. 348
Сцена………………………………………………………………………………………………………………………………………… 349
Представление…………………………………………………………………………………………………………………………. 350
Элемент…………………………………………………………………………………………………………………………………….. 350
Определение столкновений элементов…………………………………………………………………………… 353
События……………………………………………………………………………………………………………………………………. 354
Виджеты в графическом представлении……………………………………………………………………………….. 358
Резюме………………………………………………………………………………………………………………………………………. 360
Глава 22. Анимация……………………………………………………………………………… 362
Класс QMovie…………………………………………………………………………………………………………………………… 362
SVG-графика…………………………………………………………………………………………………………………………….. 363
Анимационный движок и машина состояний……………………………………………………………………….. 365
Смягчающие линии………………………………………………………………………………………………………….. 367
Настройка кривых Безье и TCB-сплайнов…………………………………………………………………….. 373
Машина состояний и переходы……………………………………………………………………………………… 373
Резюме………………………………………………………………………………………………………………………………………. 375
Глава 23. Работа с OpenGL…………………………………………………………………… 377
Основные положения OpenGL………………………………………………………………………………………………… 377
Реализация OpenGL-программы…………………………………………………………………………………………….. 379
Разворачивание OpenGL-программ во весь экран………………………………………………………………… 382
Графические примитивы OpenGL…………………………………………………………………………………………… 382
Трехмерная графика………………………………………………………………………………………………………………… 385
Резюме………………………………………………………………………………………………………………………………………. 390
Глава 24. Вывод на печать…………………………………………………………………… 391
Класс QPrinter………………………………………………………………………………………………………………………….. 391
Многостраничная печать………………………………………………………………………………………………… 396
Резюме………………………………………………………………………………………………………………………………………. 397
Глава 25. Разработка собственных элементов управления…………………… 398
Примеры создания виджетов………………………………………………………………………………………………….. 398
Лучшие практики при создании собственных виджетов……………………………………………………… 403
Резюме………………………………………………………………………………………………………………………………………. 404
Глава 26. Элементы со стилем………………………………………………………………. 405
Встроенные стили……………………………………………………………………………………………………………………. 407
Поддержка темной темы…………………………………………………………………………………………………………. 411
Создание собственных стилей……………………………………………………………………………………………….. 411
Методы рисования элементов управления……………………………………………………………………………. 412
Метод рисования простых элементов управления……………………………………………………….. 412
Метод рисования основных элементов управления…………………………………………………….. 413
Метод рисования составных элементов управления……………………………………………………. 413
Реализация стиля простого элемента управления………………………………………………………… 413
Использование каскадных стилей документа………………………………………………………………………. 417
Основные положения……………………………………………………………………………………………………….. 417
Изменение подэлементов…………………………………………………………………………………………………. 419
Управление состояниями………………………………………………………………………………………………… 420
Пример………………………………………………………………………………………………………………………………. 421
Резюме………………………………………………………………………………………………………………………………………. 425
Глава 27. Мультимедиа………………………………………………………………………… 426
Звук……………………………………………………………………………………………………………………………………………. 426
Воспроизведение звуковых эффектов: класс QSoundEffect………………………………………….. 427
Воспроизведение мультимедиа: класс QMediaPlayer………………………………………………….. 427
Создание аудиоплеера…………………………………………………………………………………………… 428
Видео и класс QMediaPlayer…………………………………………………………………………………………… 434
Обработка ошибок в мультимедийных приложениях………………………………………………….. 437
Поддержка камеры…………………………………………………………………………………………………………… 437
Запись медиаконтента…………………………………………………………………………………………………….. 438
Резюме………………………………………………………………………………………………………………………………………. 439
Часть V. Создание приложений………………………………………………. 441
Глава 28. Сохранение настроек приложения………………………………………… 442
Улучшенный доступ к данным……………………………………………………………………………………………….. 449
Резюме………………………………………………………………………………………………………………………………………. 450
Глава 29. Буфер обмена и перетаскивание…………………………………………… 451
Буфер обмена…………………………………………………………………………………………………………………………… 451
Перетаскивание……………………………………………………………………………………………………………………….. 452
Реализация drag………………………………………………………………………………………………………………… 454
Реализация drop……………………………………………………………………………………………………………….. 456
Создание собственных типов перетаскивания……………………………………………………………… 458
Практические советы по работе с буфером обмена и перетаскиванием……………………………. 463
Резюме………………………………………………………………………………………………………………………………………. 464
Глава 30. Интернационализация приложения (см. эл. архив)…………… 1
Подготовка приложения к интернационализации…………………………………………………………. 1
Утилита lupdate………………………………………………………………………………………………………………… 4
Программа Qt Linguist………………………………………………………………………………………………………. 5
Утилита lrelease. Пример программы, использующей перевод…………………………………….. 7
Смена перевода в процессе работы программы……………………………………………………………. 9
Завершающие размышления…………………………………………………………………………………………. 12
Резюме……………………………………………………………………………………………………………………………… 13
Глава 31. Создание меню……………………………………………………………………… 466
«Анатомия» меню…………………………………………………………………………………………………………………….. 466
Контекстные меню…………………………………………………………………………………………………………………… 470
Резюме………………………………………………………………………………………………………………………………………. 471
Глава 32. Диалоговые окна………………………………………………………………….. 473
Правила создания диалоговых окон……………………………………………………………………………………… 473
Класс QDialog………………………………………………………………………………………………………………………….. 474
Модальные диалоговые окна…………………………………………………………………………………………. 474
Немодальные диалоговые окна……………………………………………………………………………………… 475
Создание собственного диалогового окна…………………………………………………………………….. 476
Стандартные диалоговые окна………………………………………………………………………………………………. 479
Диалоговое окно выбора файлов……………………………………………………………………………………. 479
Диалоговое окно настройки принтера…………………………………………………………………………… 483
Диалоговое окно выбора цвета………………………………………………………………………………………. 484
Диалоговое окно выбора шрифта…………………………………………………………………………………… 485
Диалоговое окно ввода……………………………………………………………………………………………………. 486
Диалоговое окно процесса……………………………………………………………………………………………… 487
Диалоговые окна мастера……………………………………………………………………………………………….. 488
Диалоговые окна сообщений………………………………………………………………………………………………….. 489
Окно информационного сообщения……………………………………………………………………………….. 492
Окно предупреждающего сообщения…………………………………………………………………………….. 492
Окно критического сообщения……………………………………………………………………………………….. 492
Окно сообщения о программе…………………………………………………………………………………………. 493
Окно сообщения About Qt………………………………………………………………………………………………… 493
Окно сообщения об ошибке…………………………………………………………………………………………….. 493
Резюме………………………………………………………………………………………………………………………………………. 494
Глава 33. Предоставление помощи………………………………………………………. 496
Всплывающая подсказка………………………………………………………………………………………………………… 496
Система помощи (Online Help)………………………………………………………………………………………………… 498
Использование QAssistant……………………………………………………………………………………………………….. 500
Резюме………………………………………………………………………………………………………………………………………. 501
Глава 34. Главное окно, создание SDI- и MDI-приложений………………….. 503
Класс главного окна QMainWindow………………………………………………………………………………………. 503
Класс действия QAction…………………………………………………………………………………………………………… 504
Панель инструментов………………………………………………………………………………………………………………. 505
Доки…………………………………………………………………………………………………………………………………………… 507
Строка состояния…………………………………………………………………………………………………………………….. 508
Окно заставки…………………………………………………………………………………………………………………………… 509
SDI- и MDI-приложения………………………………………………………………………………………………………….. 511
SDI-приложение……………………………………………………………………………………………………………….. 512
MDI-приложение……………………………………………………………………………………………………………… 517
Резюме………………………………………………………………………………………………………………………………………. 525
Глава 35. Рабочий стол (Desktop)………………………………………………………….. 527
Область уведомлений……………………………………………………………………………………………………………… 527
Работа с экранами…………………………………………………………………………………………………………………… 532
Центрирование окна на экране………………………………………………………………………………………. 532
Получение списка экранов……………………………………………………………………………………………… 532
Работа с координатами и экранами……………………………………………………………………………….. 533
Сигналы QScreen……………………………………………………………………………………………………………… 533
Пример: приложение для захвата экрана……………………………………………………………………… 533
Класс сервиса рабочего стола……………………………………………………………………………………………….. 536
Резюме………………………………………………………………………………………………………………………………………. 536
Часть VI. Особые возможности Qt………………………………………… 537
Глава 36. Работа с файлами, каталогами и потоками ввода/вывода…….. 538
Ввод/вывод: класс QIODevice…………………………………………………………………………………………………. 538
Работа с файлами: класс QFile………………………………………………………………………………………………. 540
Класс QBuffer……………………………………………………………………………………………………………………. 542
Класс QTemporaryFile……………………………………………………………………………………………………… 542
Работа с каталогами: класс QDir…………………………………………………………………………………………… 543
Просмотр содержимого каталога…………………………………………………………………………………… 543
Получение путей к стандартным каталогам…………………………………………………………………. 546
Информация о файлах: класс QFileInfo…………………………………………………………………………………. 547
Файл или каталог?…………………………………………………………………………………………………………… 548
Путь и имя файла……………………………………………………………………………………………………………… 548
Информация о дате и времени………………………………………………………………………………………… 548
Получение атрибутов файла…………………………………………………………………………………………… 548
Определение размера файла…………………………………………………………………………………………… 549
Наблюдение за файлами и каталогами…………………………………………………………………………………. 549
Потоки ввода/вывода………………………………………………………………………………………………………………. 551
Класс QTextStream……………………………………………………………………………………………………………. 551
Класс QDataStream………………………………………………………………………………………………………….. 552
Информация о хранилищах……………………………………………………………………………………………………. 553
Резюме………………………………………………………………………………………………………………………………………. 553
Глава 37. Дата, время и таймер…………………………………………………………….. 555
Дата и время…………………………………………………………………………………………………………………………….. 555
Класс даты QDate…………………………………………………………………………………………………………….. 555
Класс времени: QTime……………………………………………………………………………………………………… 557
Класс даты и времени: QDateTime………………………………………………………………………………….. 558
Таймер………………………………………………………………………………………………………………………………………. 558
Событие таймера……………………………………………………………………………………………………………… 559
Класс QTimer…………………………………………………………………………………………………………………….. 561
Класс QBasicTimer……………………………………………………………………………………………………………. 563
Работа с временнми зонами………………………………………………………………………………………….. 563
Резюме………………………………………………………………………………………………………………………………………. 564
Глава 38. Процессы и потоки……………………………………………………………….. 565
Процессы………………………………………………………………………………………………………………………………….. 565
Потоки………………………………………………………………………………………………………………………………………. 568
Подход 1: наследование от QThread……………………………………………………………………………… 570
Подход 2: перемещение объекта в поток……………………………………………………………………….. 570
Приоритеты………………………………………………………………………………………………………………………. 571
Обмен сообщениями………………………………………………………………………………………………………… 571
Сигнально-слотовые соединения………………………………………………………………………….. 572
Отправка событий…………………………………………………………………………………………………… 577
Синхронизация…………………………………………………………………………………………………………………. 579
Мьютексы………………………………………………………………………………………………………………… 580
Семафоры………………………………………………………………………………………………………………… 581
Ожидание условий………………………………………………………………………………………………….. 582
Блокировка чтения/записи…………………………………………………………………………………….. 583
Возникновение тупиковых ситуаций…………………………………………………………………….. 583
Фреймворк QtConcurrent…………………………………………………………………………………………………………. 584
Цепочки операций……………………………………………………………………………………………………………. 586
Поддержка лямбда-выражений………………………………………………………………………………………. 586
Класс QPromise………………………………………………………………………………………………………………… 586
Резюме………………………………………………………………………………………………………………………………………. 587
Глава 39. Программирование поддержки сети……………………………………… 589
Сокетное соединение………………………………………………………………………………………………………………. 589
Модель «клиент-сервер»………………………………………………………………………………………………….. 590
Реализация TCP-сервера…………………………………………………………………………………………………. 591
Реализация TCP-клиента…………………………………………………………………………………………………. 596
Реализация UDP-сервера и UDP-клиента………………………………………………………………………………. 601
Управление доступом к сети…………………………………………………………………………………………………… 604
Блокирующий подход……………………………………………………………………………………………………………… 610
Режим прокси……………………………………………………………………………………………………………………………. 613
Информация о хосте………………………………………………………………………………………………………………… 613
Есть ли соединение с Интернетом?………………………………………………………………………………………… 614
Новый HTTP-стек…………………………………………………………………………………………………………………….. 615
Протокол WebSocket……………………………………………………………………………………………………………….. 616
Резюме………………………………………………………………………………………………………………………………………. 617
Глава 40. Работа с XML, JSON и Protobuf…………………………………………….. 619
Формат XML…………………………………………………………………………………………………………………………….. 619
Основные понятия и структура XML-документа………………………………………………………….. 619
XML и Qt…………………………………………………………………………………………………………………………… 621
Работа с DOM…………………………………………………………………………………………………………………… 621
Чтение XML-документа………………………………………………………………………………………….. 622
Создание и запись XML-документа………………………………………………………………………. 624
Работа с SAX…………………………………………………………………………………………………………………….. 626
Чтение XML-документа………………………………………………………………………………………….. 626
Классы QXmlStreamReader и QXmlStreamWriter……………………………………………………………. 629
Чтение XML с помощью QXmlStreamReader………………………………………………………… 629
Запись XML с помощью QXmlStreamWriter………………………………………………………….. 630
Формат JSON……………………………………………………………………………………………………………………………. 631
Основные классы для работы с JSON…………………………………………………………………………….. 631
Чтение JSON-файла………………………………………………………………………………………………………….. 632
Запись JSON-файла………………………………………………………………………………………………………….. 633
Формат Protobuf………………………………………………………………………………………………………………………. 635
Схема данных (proto-файл)…………………………………………………………………………………………….. 635
Создание файла с Protobuf-данными……………………………………………………………………………… 636
Чтение Protobuf-данных………………………………………………………………………………………………….. 637
Рекомендации по выбору………………………………………………………………………………………………………… 638
Резюме………………………………………………………………………………………………………………………………………. 639
Глава 41. Программирование баз данных…………………………………………….. 641
Основные положения SQL………………………………………………………………………………………………………. 641
Создание таблицы……………………………………………………………………………………………………………. 642
Операция вставки…………………………………………………………………………………………………………….. 642
Чтение данных………………………………………………………………………………………………………………….. 642
Изменение данных……………………………………………………………………………………………………………. 643
Удаление…………………………………………………………………………………………………………………………… 643
Использование языка SQL в библиотеке Qt…………………………………………………………………………… 643
Соединение с базой данных (второй уровень)………………………………………………………………. 645
Исполнение команд SQL (второй уровень)……………………………………………………………………. 646
Классы SQL-моделей для интервью (третий уровень)………………………………………………….. 649
Модель запроса………………………………………………………………………………………………………. 649
Табличная модель…………………………………………………………………………………………………… 650
Реляционная модель……………………………………………………………………………………………….. 652
Резюме………………………………………………………………………………………………………………………………………. 653
Глава 42. Динамические библиотеки и система расширений
(см. эл. архив)…………………………………………………………………………………… 1
Динамические библиотеки………………………………………………………………………………………………. 1
Динамическая загрузка и выгрузка библиотеки…………………………………………………….. 3
Особенности именования и загрузки динамических библиотек………………….. 5
Расширения (plug-ins)……………………………………………………………………………………………………….. 6
Расширения для Qt……………………………………………………………………………………………………. 7
Поддержка собственных расширений в приложениях………………………………………….. 8
Диагностика и отладка расширений……………………………………………………………. 12
Создание расширения для приложения………………………………………………………. 13
Система метаданных плагинов……………………………………………………………………. 15
Резюме……………………………………………………………………………………………………………………………… 16
Глава 43. Совместное использование Qt с платформозависимыми API
(см. эл. архив)…………………………………………………………………………………… 1
Совместное использование с Windows API…………………………………………………………………….. 3
Совместное использование с Linux…………………………………………………………………………………. 5
Совместное использование с macOS………………………………………………………………………………. 5
Системная информация……………………………………………………………………………………………………. 6
Резюме……………………………………………………………………………………………………………………………….. 8
Глава 44. Qt Designer. Быстрая разработка прототипов……………………….. 657
Создание новой формы в Qt Designer……………………………………………………………………………………… 657
Добавление виджетов……………………………………………………………………………………………………………… 660
Компоновка (layout)………………………………………………………………………………………………………………… 661
Порядок следования табулятора……………………………………………………………………………………………. 662
Сигналы и слоты……………………………………………………………………………………………………………………… 663
Использование в формах собственных виджетов…………………………………………………………………. 665
Использование форм в проектах…………………………………………………………………………………………….. 666
Компиляция………………………………………………………………………………………………………………………………. 668
Динамическая загрузка формы………………………………………………………………………………………………. 669
Резюме………………………………………………………………………………………………………………………………………. 672
Глава 45. Проведение тестов (см. эл. архив)……………………………………… 1
Создание тестов………………………………………………………………………………………………………………… 2
Тесты с передачей данных………………………………………………………………………………………. 5
Создание тестов графического интерфейса…………………………………………………………………… 7
Параметры для запуска тестов……………………………………………………………………………………….. 9
Резюме……………………………………………………………………………………………………………………………… 10
Глава 46. Qt WebEngine………………………………………………………………………… 674
А зачем?……………………………………………………………………………………………………………………………………. 675
Быстрый старт…………………………………………………………………………………………………………………………. 676
Создание простого веб-браузера…………………………………………………………………………………………… 678
Ввод адресов…………………………………………………………………………………………………………………….. 678
Управление историей………………………………………………………………………………………………………. 678
Загрузка страниц и ресурсов………………………………………………………………………………………….. 679
Пишем веб-браузер: попытка номер два……………………………………………………………………….. 679
Резюме………………………………………………………………………………………………………………………………………. 683
Глава 47. Интегрированная среда разработки Qt Creator
(см. эл. архив)…………………………………………………………………………………… 1
Первый запуск…………………………………………………………………………………………………………………… 3
Создаем проект «Hello Qt Creator»………………………………………………………………………………….. 3
Пользовательский интерфейс Qt Creator………………………………………………………………………… 8
Окна вывода………………………………………………………………………………………………………………. 8
Окно проектного обозревателя………………………………………………………………………………… 9
Секция компилирования и запуска………………………………………………………………………….. 9
Редактирование текста…………………………………………………………………………………………………… 11
Как подсвечен ваш синтаксис?……………………………………………………………………………… 11
Скрытие и отображение кода………………………………………………………………………………… 12
Автоматическое дополнение кода………………………………………………………………………… 12
Поиск и замена………………………………………………………………………………………………………… 13
Комбинации клавиш для ускорения работы………………………………………………………… 18
Вертикальное выделение текста………………………………………………………………….. 18
Автоматическое форматирование текста……………………………………………………. 18
Комментирование блоков……………………………………………………………………………… 19
Просмотр кода методов класса, их определений и атрибутов………………….. 19
Помощь, которая всегда рядом…………………………………………………………………….. 20
Интерактивный отладчик и программный экзорцизм…………………………………………………. 21
Синтаксические ошибки…………………………………………………………………………………………. 22
Ошибки компоновки……………………………………………………………………………………………….. 23
Ошибки времени исполнения…………………………………………………………………………………. 23
Логические ошибки…………………………………………………………………………………………………. 24
Трассировка…………………………………………………………………………………………………………….. 24
Команда Step Over…………………………………………………………………………………………. 25
Команда Step Into………………………………………………………………………………………….. 25
Команда Step Out…………………………………………………………………………………………… 26
Контрольные точки………………………………………………………………………………………………… 26
Окно переменных (Local and Watches)………………………………………………………………….. 27
Окно цепочки вызовов (Call Stack)………………………………………………………………………… 28
Резюме……………………………………………………………………………………………………………………………… 28
Глава 48. Рекомендации по миграции программ из Qt 5 в Qt 6…………….. 686
Основные отличия Qt 6 от Qt 5……………………………………………………………………………………………….. 686
Подробности перевода на Qt 6……………………………………………………………………………………………….. 686
Виджеты: замена устаревших классов………………………………………………………………………….. 687
Контейнерные классы……………………………………………………………………………………………………… 687
Класс QVector………………………………………………………………………………………………………….. 687
Класс QLinkedList……………………………………………………………………………………………………. 688
Функция qVariantValue()………………………………………………………………………………………… 688
Система сигналов и слотов……………………………………………………………………………………………… 688
Графика и рендеринг……………………………………………………………………………………………………….. 688
Платформозависимый код………………………………………………………………………………………………. 689
Мультимедиа……………………………………………………………………………………………………………………. 689
QML и Qt Quick………………………………………………………………………………………………………………………… 689
Управление памятью и современный C++…………………………………………………………………………….. 690
Модуль совместимости Qt5Compat……………………………………………………………………………………….. 690
Пошаговый план миграции…………………………………………………………………………………………………….. 690
Резюме………………………………………………………………………………………………………………………………………. 691
Часть VII. Язык сценариев JavaScript…………………………………… 693
Глава 49. Основы поддержки сценариев JavaScript (см. эл. архив)….. 1
Принцип взаимодействия с языком сценариев……………………………………………………………….. 2
Первый шаг использования сценария…………………………………………………………………………….. 5
Привет, сценарий………………………………………………………………………………………………………………. 6
Резюме……………………………………………………………………………………………………………………………….. 7
Глава 50. Синтаксис языка сценариев (см. эл. архив)………………………. 1
Зарезервированные ключевые слова……………………………………………………………………………… 1
Комментарии…………………………………………………………………………………………………………………….. 2
Переменные……………………………………………………………………………………………………………………….. 2
Предопределенные типы данных……………………………………………………………………………. 3
Числовой тип……………………………………………………………………………………………………. 3
Строковый тип…………………………………………………………………………………………………. 4
Логический тип………………………………………………………………………………………………… 5
Null и Undefined……………………………………………………………………………………………….. 5
Тип Symbol………………………………………………………………………………………………………… 5
Преобразование типов……………………………………………………………………………………………… 5
Операции…………………………………………………………………………………………………………………………… 6
Операторы присваивания………………………………………………………………………………………… 6
Арифметические операции………………………………………………………………………………………. 7
Поразрядные операции…………………………………………………………………………………………….. 8
Операции сравнения…………………………………………………………………………………………………. 8
Приоритет выполнения операций……………………………………………………………………………. 9
Управляющие структуры………………………………………………………………………………………………. 10
Условные операторы……………………………………………………………………………………………… 10
Оператор if … else…………………………………………………………………………………………… 10
Оператор switch……………………………………………………………………………………………… 11
Оператор условного выражения……………………………………………………………………………. 12
Циклы……………………………………………………………………………………………………………………….. 12
Операторы break и continue………………………………………………………………………….. 12
Цикл for…………………………………………………………………………………………………………… 12
Цикл while………………………………………………………………………………………………………. 13
Цикл do…while………………………………………………………………………………………………… 13
Оператор with………………………………………………………………………………………………………….. 13
Исключительные ситуации……………………………………………………………………………………. 14
Оператор try…catch……………………………………………………………………………………….. 14
Оператор throw………………………………………………………………………………………………. 15
Функции…………………………………………………………………………………………………………………………… 15
Встроенные функции………………………………………………………………………………………………. 17
Объектная ориентация…………………………………………………………………………………………………… 17
Статические классы……………………………………………………………………………………………….. 19
Наследование………………………………………………………………………………………………………….. 20
Перегрузка методов………………………………………………………………………………………………… 23
Сказание о «джейсоне»…………………………………………………………………………………………… 23
Резюме……………………………………………………………………………………………………………………………… 24
Глава 51. Встроенные объекты JavaScript (см. эл. архив)…………………. 1
Объект Global……………………………………………………………………………………………………………………. 1
Объект Number………………………………………………………………………………………………………………….. 1
Объект Boolean…………………………………………………………………………………………………………………. 2
Объект String…………………………………………………………………………………………………………………….. 2
Замена………………………………………………………………………………………………………………………… 2
Получение символов…………………………………………………………………………………………………. 2
Получение подстроки……………………………………………………………………………………………….. 2
Объект RegExp…………………………………………………………………………………………………………………… 3
Проверка строки……………………………………………………………………………………………………….. 3
Поиск позиции совпадений………………………………………………………………………………………. 3
Найденное совпадение…………………………………………………………………………………………….. 4
Получение всех совпадений…………………………………………………………………………………….. 4
Замена с использованием функции…………………………………………………………………………. 4
Разделение строки…………………………………………………………………………………………………….. 4
Объект Array……………………………………………………………………………………………………………………… 4
Дополнение массива элементами……………………………………………………………………………. 5
Адресация элементов……………………………………………………………………………………………….. 5
Изменение порядка элементов массива………………………………………………………………….. 5
Преобразование массива в строку………………………………………………………………………….. 6
Объединение массивов……………………………………………………………………………………………… 6
Упорядочивание элементов……………………………………………………………………………………… 6
Многомерные массивы…………………………………………………………………………………………….. 6
Объект Date……………………………………………………………………………………………………………………….. 7
Объект Маth………………………………………………………………………………………………………………………. 8
Модуль числа……………………………………………………………………………………………………………. 9
Округление………………………………………………………………………………………………………………… 9
Определение максимума и минимума…………………………………………………………………….. 9
Возведение в степень………………………………………………………………………………………………… 9
Вычисление квадратного корня…………………………………………………………………………….. 10
Генератор случайных чисел………………………………………………………………………………….. 10
Тригонометрические методы…………………………………………………………………………………. 10
Вычисление натурального логарифма…………………………………………………………………. 11
Объект Function………………………………………………………………………………………………………………. 11
Резюме……………………………………………………………………………………………………………………………… 11
Глава 52. Классы поддержки JavaScript и практические примеры
(см. эл. архив)…………………………………………………………………………………… 1
Класс QJSValue…………………………………………………………………………………………………………………. 1
Класс QJSEngine………………………………………………………………………………………………………………. 1
Практические примеры…………………………………………………………………………………………………….. 2
«Черепашья» графика……………………………………………………………………………………………….. 2
Сигналы, слоты и функции………………………………………………………………………………………. 8
Полезные дополнительные функции…………………………………………………………………….. 12
Резюме……………………………………………………………………………………………………………………………… 15
Часть VIII. Технология Qt Quick……………………………………………… 695
Глава 53. Знакомство с Qt Quick…………………………………………………………… 696
А зачем?……………………………………………………………………………………………………………………………………. 696
Введение в QML……………………………………………………………………………………………………………………….. 698
Быстрый старт…………………………………………………………………………………………………………………………. 700
Использование JavaScript в QML……………………………………………………………………………………………. 704
Резюме………………………………………………………………………………………………………………………………………. 706
Глава 54. Элементы……………………………………………………………………………… 707
Визуальные элементы……………………………………………………………………………………………………………… 707
Свойства элементов…………………………………………………………………………………………………………………. 709
Собственные свойства…………………………………………………………………………………………………….. 712
Создание собственных элементов………………………………………………………………………………………….. 714
Создание собственных модулей…………………………………………………………………………………………….. 716
Динамическое создание элементов………………………………………………………………………………………… 717
Элемент Flickable…………………………………………………………………………………………………………………….. 717
Готовые элементы пользовательского интерфейса……………………………………………………………… 718
Диалоговые окна……………………………………………………………………………………………………………………… 722
Резюме………………………………………………………………………………………………………………………………………. 724
Глава 55. Управление размещением элементов (см. эл. архив)…………. 1
Фиксаторы…………………………………………………………………………………………………………………………. 1
Традиционные размещения……………………………………………………………………………………………… 7
Размещение в виде потока……………………………………………………………………………………………… 11
Резюме……………………………………………………………………………………………………………………………… 12
Глава 56. Элементы графики (см. эл. архив)…………………………………….. 1
Цвета………………………………………………………………………………………………………………………………….. 1
Растровые изображения…………………………………………………………………………………………………… 2
Элемент Image…………………………………………………………………………………………………………… 2
Элемент BorderImage………………………………………………………………………………………………… 6
Градиенты…………………………………………………………………………………………………………………………. 7
Шрифты……………………………………………………………………………………………………………………………… 9
Рисование на элементах холста……………………………………………………………………………………. 10
Шейдеры и эффекты……………………………………………………………………………………………………….. 14
Резюме……………………………………………………………………………………………………………………………… 17
Глава 57. Пользовательский ввод (см. эл. архив)……………………………… 1
Область мыши…………………………………………………………………………………………………………………… 1
Сигналы…………………………………………………………………………………………………………………………….. 4
Ввод с клавиатуры……………………………………………………………………………………………………………. 8
Фокус………………………………………………………………………………………………………………………….. 8
«Сырой» ввод…………………………………………………………………………………………………………… 10
Мультитач………………………………………………………………………………………………………………………. 12
Резюме……………………………………………………………………………………………………………………………… 14
Глава 58. Анимация……………………………………………………………………………… 729
Анимация при изменении свойств………………………………………………………………………………………….. 729
Анимация для изменения числовых значений……………………………………………………………….. 731
Анимация с изменением цвета………………………………………………………………………………………… 732
Анимация с поворотом…………………………………………………………………………………………………….. 733
Анимации поведения……………………………………………………………………………………………………………….. 734
Параллельные и последовательные анимации…………………………………………………………………….. 735
Состояния и переходы…………………………………………………………………………………………………………….. 739
Состояния…………………………………………………………………………………………………………………………. 739
Переходы………………………………………………………………………………………………………………………….. 741
Модуль частиц…………………………………………………………………………………………………………………………. 743
Резюме………………………………………………………………………………………………………………………………………. 747
Глава 59. Модель/Представление…………………………………………………………. 748
Модели……………………………………………………………………………………………………………………………………… 748
Модель списка………………………………………………………………………………………………………………….. 748
JSON-модель……………………………………………………………………………………………………………………… 749
Представление данных моделей…………………………………………………………………………………………….. 750
Элемент ListView………………………………………………………………………………………………………………. 750
Элемент GridView…………………………………………………………………………………………………………….. 753
Элемент PathView…………………………………………………………………………………………………………….. 755
Визуальная модель данных……………………………………………………………………………………………………. 757
Резюме………………………………………………………………………………………………………………………………………. 759
Глава 60. Qt Quick и C++……………………………………………………………………… 760
Использование языка QML в C++…………………………………………………………………………………………… 760
Взаимодействие из C++ со свойствами QML-элементов и вызов их функций……………. 761
Соединение QML-сигналов со слотами C++…………………………………………………………………. 763
Использование компонентов языка C++ в QML……………………………………………………………………. 766
Экспорт объектов и виджетов из C++ в QML…………………………………………………………………. 767
Использование зарегистрированных объектов C++, их свойств и методов в QML……. 769
Реализация визуальных элементов QML на C++………………………………………………………….. 773
Класс QQuickImageProvider……………………………………………………………………………………………. 776
Резюме………………………………………………………………………………………………………………………………………. 780
Глава 61. 3D-графика: Qt 3D………………………………………………………………… 782
Основы………………………………………………………………………………………………………………………………………. 782
Cвет…………………………………………………………………………………………………………………………………………… 783
Камера………………………………………………………………………………………………………………………………………. 784
3D-объекты……………………………………………………………………………………………………………………………….. 785
Материалы……………………………………………………………………………………………………………………………….. 787
Трансформация………………………………………………………………………………………………………………………… 791
Анимация………………………………………………………………………………………………………………………………….. 792
Резюме………………………………………………………………………………………………………………………………………. 794
Часть IX. Мобильные приложения и Qt………………………………… 797
Глава 62. Введение в мир мобильных приложений………………………………. 798
Смартфоны изменили всё………………………………………………………………………………………………………… 799
Виртуальные магазины приложений…………………………………………………………………………………….. 800
Распространение приложений вне виртуального магазина………………………………………………… 803
Qt 6 и разработка мобильных приложений…………………………………………………………………………… 803
Резюме………………………………………………………………………………………………………………………………………. 804
Глава 63. Подготовка к работе над мобильными приложениями…………. 806
Подготовка среды для разработки iOS-приложений……………………………………………………………. 806
Резюме………………………………………………………………………………………………………………………………………. 809
Глава 64. Особенности разработки приложений
для мобильных устройств…………………………………………………………………….. 810
Анатомия свойств для iOS-приложений…………………………………………………………………………………. 811
Свойства iOS-приложений………………………………………………………………………………………………. 811
Автоматический поворот………………………………………………………………………………………………………… 813
Обработка поворота в приложениях……………………………………………………………………………………… 815
Сенсоры……………………………………………………………………………………………………………………………………. 816
Пользовательский ввод при помощи пальцев……………………………………………………………………….. 819
Положение рук…………………………………………………………………………………………………………………………. 821
Резюме………………………………………………………………………………………………………………………………………. 822
Глава 65. Пример разработки мобильного приложения (см. эл. архив) 1
Обдумывание и планирование приложения…………………………………………………………………… 1
Название приложения………………………………………………………………………………………………. 2
Значок приложения…………………………………………………………………………………………………… 2
Что будет в первой версии?……………………………………………………………………………………… 3
Пишем код…………………………………………………………………………………………………………………………. 5
Добавление к приложению значков и стартовых экранов…………………………………………. 12
Резюме……………………………………………………………………………………………………………………………… 13
Глава 66. Публикация в магазине мобильных приложений
(см. эл. архив)…………………………………………………………………………………… 1
Этапы работы…………………………………………………………………………………………………………………… 1
Регистрация……………………………………………………………………………………………………………….. 2
Настройки для запуска приложений на реальных устройствах………………………….. 3
Создание электронной подписи………………………………………………………………………………. 8
Создание страницы приложения…………………………………………………………………………….. 9
Загрузка и публикация приложения……………………………………………………………………… 15
Резюме……………………………………………………………………………………………………………………………… 17
Часть X. Qt и ИИ………………………………………………………………………………. 825
Глава 67. Разработчик Qt в эпоху искусственного интеллекта…………….. 826
От искры до пепла — знакомый путь разработчика……………………………………………………………. 826
История революций: огонь, пар, электричество и… интеллект……………………………………………. 826
Взгляд на нейросети по-человечески…………………………………………………………………………………….. 827
Страх, который стоит рядом с возможностью………………………………………………………………………. 827
Новая типология разработчиков……………………………………………………………………………………………. 827
Новый язык: диалог с машиной……………………………………………………………………………………………… 828
Неудобная правда: что действительно происходит…………………………………………………………….. 828
К чему готовиться: навыки будущего……………………………………………………………………………………. 830
Навык № 1: Архитектурное мышление………………………………………………………………………….. 830
Навык № 2: Промпт-инжиниринг — язык взаимодействия с ИИ………………………………….. 830
Навык № 3: Гибридное мышление — сила симбиоза человека и ИИ…………………………. 831
Навык № 4: Управление ИИ-агентами — оркестровка цифровой команды……………….. 831
Навык № 5: Фундаментальные знания…………………………………………………………………………… 832
Qt 6 — ваше секретное оружие в эпоху ИИ…………………………………………………………………………… 832
Почему Qt идеально подходит для ИИ-разработки?……………………………………………………. 832
Финальные мысли……………………………………………………………………………………………………………………. 833
Мир, где джуниоры исчезают…………………………………………………………………………………………. 833
Рынок ищет «сшивателей миров»……………………………………………………………………………………. 833
Что не сможет автоматизировать ни одна нейросеть?…………………………………………………. 834
Три простые истины………………………………………………………………………………………………………… 834
Мы уже проходили это……………………………………………………………………………………………………. 834
Трансформация, а не исчезновение………………………………………………………………………………… 835
Где наша настоящая ценность?……………………………………………………………………………………… 835
Резюме………………………………………………………………………………………………………………………………………. 835
Глава 68. Чат-боты в Qt-разработке……………………………………………………… 837
Почему чат-боты стали незаменимыми…………………………………………………………………………………. 837
Типы современных моделей……………………………………………………………………………………………………. 838
Reasoning-модели…………………………………………………………………………………………………………….. 838
Vision-модели и мультимодальные модели……………………………………………………………………. 838
Мультиязычные модели………………………………………………………………………………………………….. 839
Облачные чат-боты…………………………………………………………………………………………………………………. 839
ChatGPT…………………………………………………………………………………………………………………………….. 839
Генерация визуального контента и кода полноценного приложения……………….. 841
Собственные GPTs и Projects………………………………………………………………………………….. 843
Клиентские приложения ChatGPT…………………………………………………………………………. 845
Слабые стороны ChatGPT……………………………………………………………………………………… 845
Claude………………………………………………………………………………………………………………………………… 845
Экономия токенов: батчинг запросов…………………………………………………………………… 847
Генерация кода с использованием визуального контента………………………………….. 848
Клиентские приложения Claude…………………………………………………………………………….. 848
Ограничения Claude……………………………………………………………………………………………….. 849
Дополнительные облачные чат-боты……………………………………………………………………………. 849
Локальные чат-боты……………………………………………………………………………………………………………….. 851
Зачем Qt-разработчику локальные модели?…………………………………………………………………. 851
Почему это особенно важно для Qt-разработчика?……………………………………………. 851
LM Studio………………………………………………………………………………………………………………………….. 851
Ollama……………………………………………………………………………………………………………………………….. 853
Сильные стороны Ollama……………………………………………………………………………………….. 854
Недостатки Ollama…………………………………………………………………………………………………. 855
Jan……………………………………………………………………………………………………………………………………… 855
GPT4All……………………………………………………………………………………………………………………………… 856
«Железо» для локальных LLM……………………………………………………………………………………….. 857
О размере моделей………………………………………………………………………………………………….. 858
Принцип выбора……………………………………………………………………………………………………… 858
Cравнение человеческого мозга и LLM………………………………………………………………… 858
Гибридный подход………………………………………………………………………………………………………………….. 858
Резюме………………………………………………………………………………………………………………………………………. 859
Глава 69. ИИ-IDE и консольные инструменты в Qt-разработке…………… 861
Gemini CLI: ИИ-ассистент в терминале…………………………………………………………………………………. 861
Установка и начало работы……………………………………………………………………………………………. 862
Работа с кодом…………………………………………………………………………………………………………………. 863
Экосистема CLI-инструментов………………………………………………………………………………………………. 864
Cursor: ИИ-IDE следующего поколения…………………………………………………………………………………. 865
Загрузка и установка……………………………………………………………………………………………………….. 865
Архитектура и режимы работы………………………………………………………………………………………. 867
Три режима работы: выбери нужный подход……………………………………………………………….. 867
Режим Agent (агента): автопилот для сложных задач…………………………………………. 867
Режим вопросов (Ask): консультант и аналитик………………………………………………….. 868
Режим Plan (план): создание подробных планов…………………………………………………. 868
Правила проекта: обучаем ИИ вашему стилю и подходу……………………………………………. 868
«Горячие клавиши»: ваш боевой арсенал……………………………………………………………………… 870
Автодополнение на стероидах………………………………………………………………………………. 870
Встроенное редактирование………………………………………………………………………………….. 871
Чат с кодовой базой………………………………………………………………………………………………… 871
Лучшие практики работы с ИИ в Qt-проектах………………………………………………………………. 872
Работа с контекстом……………………………………………………………………………………………….. 872
Использование MCP-серверов……………………………………………………………………………….. 873
Структурирование промптов…………………………………………………………………………………. 873
Итеративная разработка………………………………………………………………………………………… 874
Проверяйте Qt-специфику………………………………………………………………………………………. 874
Рефакторинг и оптимизация…………………………………………………………………………………… 874
Используйте скриншоты для UI…………………………………………………………………………….. 875
Сравнение Gemini CLI и Cursor на примере рефакторинга плеера…………………………………….. 875
Экосистема IDE-инструментов для разработки с ИИ…………………………………………………………… 876
Резюме………………………………………………………………………………………………………………………………………. 877
Глава 70. Промпт-инжиниринг как новый навык……………………………….. 879
Что изменилось и почему это важно для Qt-разработчика?………………………………………………… 879
Анатомия современного промпта…………………………………………………………………………………………… 880
Современные типы промптов…………………………………………………………………………………………………. 881
Тип A…………………………………………………………………………………………………………………………………. 881
Тип B…………………………………………………………………………………………………………………………………. 882
Тип C…………………………………………………………………………………………………………………………………. 882
Лучшие практики эффективного взаимодействия с ИИ………………………………………………… 883
Техника 1. Декомпозиция: разделяй и властвуй………………………………………………….. 884
Техника 2. «Покажи — повтори — расширь»………………………………………………………. 884
Техника 3. Явное управление версиями и устаревшими API……………………………… 885
Техника 4. Ограничительная…………………………………………………………………………………. 885
Практическая библиотека промптов……………………………………………………………………………………… 885
Работа с различными ИИ-платформами………………………………………………………………………… 885
Особенности применения CursorIDE…………………………………………………………………….. 886
Особенности применения Gemini CLI…………………………………………………………………… 886
Особенности применения LM Studio, Ollama, Jan и GPT4All………………………………. 886
И наконец………………………………………………………………………………………………………………………….. 886
Промпты для рефакторинга…………………………………………………………………………………………….. 886
Документация: создание и обновление………………………………………………………………………….. 888
Промпты для отладки: поиск и исправление багов………………………………………………………. 890
Промпты для ревью кода: поиск потенциальных проблем………………………………………….. 893
Промпт для тестирования: автоматизация проверок……………………………………………………. 895
Промпты для портирования……………………………………………………………………………………………. 896
Заключение: ответственность разработчика в эпоху ИИ-ассистентов………………………………. 898
Юридические риски и происхождение кода………………………………………………………………….. 898
Предвзятость и дискриминация………………………………………………………………………………………. 898
Утечка интеллектуальной собственности……………………………………………………………………… 898
Деградация инженерного мышления……………………………………………………………………………… 899
Правила безопасного применения………………………………………………………………………………….. 899
Баланс между скоростью и контролем………………………………………………………………………….. 899
Резюме………………………………………………………………………………………………………………………………………. 899
Эпилог………………………………………………………………………………………………….. 901
Приложения…………………………………………………………………………………… 903
Приложение 1. Настройка среды для работы над Qt-приложениями……. 904
Настройка среды для macOS………………………………………………………………………………………………….. 904
Настройка среды для Windows………………………………………………………………………………………………. 906
Настройка среды для Ubuntu Linux……………………………………………………………………………………….. 907
Приложение 2. Таблица простых чисел………………………………………………… 909
Приложение 3. Таблицы семибитной кодировки ASCII……………………….. 912
Приложение 4. Описание сопровождающего книгу файлового архива… 915
Предметный указатель…………………………………………………………………………. 926
