Глава 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