Опубликовано

Вышла книга : “Qt 6.9. Профессиональное программирование на C++”

Qt 6.9. Профессиональное программирование на C++

Книга посвящена разработке приложений для 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