Предисловие Маттиаса Эттриха 1
Благодарности 3
Предисловие автора 4
Структура книги 5
Введение 13
Часть I. Основы Qt 25
Глава 1. Обзор иерархии классов Qt 26
Первая программа на Qt 26
Модули Qt 27
Пространство имен Qt 29
Модуль QtCore 29
Модуль QtGui 30
Модуль QtWidgets 30
Модули QtQuick и QtQML 32
Модуль QtNetwork 32
Модули QtXml и QtXmlPatterns 32
Модуль QtSql 32
Модули QtMultimedia и QtMultimediaWidgets 32
Модуль QtSvg 32
Дополнительные модули Qt 32
Резюме 33
Глава 2. Философия объектной модели 35
Механизм сигналов и слотов 38
Сигналы 41
Слоты 43
Соединение объектов 44
Разъединение объектов 49
Переопределение сигналов 50
Организация объектных иерархий 51
Метаобъектная информация 53
Резюме 54
Глава 3. Работа с Qt 55
Интегрированная среда разработки 55
Программа Qt Assistant 55
Работа с qmake 55
Рекомендации для проекта с Qt 59
Метаобъектный компилятор MOC 60
Компилятор ресурсов RCC 61
Структура Qt-проекта 62
Методы отладки 62
Отладчик GDB (GNU Debugger) 63
Прочие методы отладки 66
Глобальные определения Qt 69
Информация о библиотеке Qt 71
Резюме 72
Глава 4. Библиотека контейнеров 74
Контейнерные классы 75
Итераторы 76
Итераторы в стиле Java 77
Итераторы в стиле STL 78
Ключевое слово foreach 80
Последовательные контейнеры 80
Вектор QVector< T> 82
Массив байтов QByteArray 83
Массив битов QBitArray 83
Списки QList< T> и QLinkedList< T> 84
Стек QStack< T> 85
Очередь QQueue< T> 86
Ассоциативные контейнеры 86
Словари QMap< K,T> и QMultiMap< K,T> 87
Хэши QHash< K,T> и QMultiHash< K,T> 89
Множество QSet< T> 90
Алгоритмы 91
Сортировка 92
Поиск 93
Сравнение 94
Заполнение значениями 94
Копирование значений элементов 94
Подсчет значений 95
Строки 95
Регулярные выражения 97
Произвольный тип QVariant 100
Модель общего использования данных 101
Резюме 102
Часть II. Элементы управления
103
Глава 5. С чего начинаются элементы управления? 104
Класс QWidget 104
Размеры и координаты виджета 107
Механизм закулисного хранения 108
Установка фона виджета 108
Изменение указателя мыши 109
Стек виджетов 112
Рамки 112
Виджет видовой прокрутки 113
Резюме 115
Глава 6. Управление автоматическим размещением элементов 116
Менеджеры компоновки (layout managers) 116
Горизонтальное и вертикальное размещение 118
Класс QBoxLayout 118
Горизонтальное размещение QHBoxLayout 120
Вертикальное размещение QVBoxLayout 121
Вложенные размещения 122
Табличное размещение QGridLayout 123
Порядок следования табулятора 129
Разделители QSplitter 129
Резюме 130
Глава 7. Элементы отображения 132
Надписи 132
Индикатор выполнения 136
Электронный индикатор 139
Резюме 141
Глава 8. Кнопки, флажки и переключатели 142
С чего начинаются кнопки? Класс QAbstractButton 142
Установка текста и изображения 142
Взаимодействие с пользователем 142
Опрос состояния 143
Кнопки 143
Флажки 145
Переключатели 147
Группировка кнопок 148
Резюме 151
Глава 9. Элементы настройки 152
Класс QAbstractSlider 152
Изменение положения 152
Установка диапазона 152
Установка шага 153
Установка и получение значений 153
Ползунок 153
Полоса прокрутки 155
Установщик 156
Резюме 158
Глава 10. Элементы ввода 159
Однострочное текстовое поле 159
Редактор текста 161
Запись в файл 164
Расцветка синтаксиса (syntax highlighting) 165
С чего начинаются виджеты счетчиков? 171
Счетчик 171
Элемент ввода даты и времени 172
Проверка ввода 173
Резюме 175
Глава 11. Элементы выбора 176
Простой список 176
Вставка элементов 176
Выбор элементов пользователем 178
Изменение элементов пользователем 178
Режим пиктограмм 178
Сортировка элементов 179
Иерархические списки 180
Сортировка элементов 183
Таблицы 183
Выпадающий список 185
Вкладки 186
Виджет панели инструментов 187
Резюме 188
Глава 12. Интервью, или модель-представление 189
Концепция 190
Модель 190
Представление 192
Выделение элемента 193
Делегат 195
Индексы модели 197
Иерархические данные 198
Роли элементов 201
Создание собственных моделей данных 203
Промежуточная модель данных (Proxy model) 211
Модель элементно-ориентированных классов 213
Резюме 215
Глава 13. Цветовая палитра элементов управления 217
Резюме 220
Часть III. События и взаимодействие с пользователем 221
Глава 14. События 222
Переопределение специализированных методов обработки событий 224
События клавиатуры 225
Класс QKeyEvent 225
Класс QFocusEvent 227
Событие обновления контекста рисования. Класс QPaintEvent 227
События мыши 228
Класс QMouseEvent 228
Класс QWheelEvent 232
Методы enterEvent() и leaveEvent() 233
Событие таймера. Класс QTimerEvent 233
События перетаскивания (drag & drop) 233
Класс QDragEnterEvent 233
Класс QDragLeaveEvent 233
Класс QDragMoveEvent 233
Класс QDropEvent 234
Остальные классы событий 234
Класс QChildEvent 234
Класс QCloseEvent 234
Класс QHideEvent 234
Класс QMoveEvent 234
Класс QShowEvent 234
Класс QResizeEvent 234
Реализация собственных классов событий 236
Переопределение метода event() 236
Мультитач 239
Сохранение работоспособности приложения 244
Резюме 244
Глава 15. Фильтры событий
246
Реализация фильтров событий 246
Резюме 249
Глава 16. Искусственное создание событий
250
Резюме 253
Часть IV. Графика и звук
255
Глава 17. Введение в компьютерную графику
256
Классы геометрии 256
Точка 256
Двумерный размер 257
Прямоугольник 259
Прямая линия 259
Многоугольник 260
Цвет 260
Класс QСolor 260
Цветовая модель RGB 261
Цветовая модель HSV 262
Цветовая модель CMYK 263
Палитра 264
Предопределенные цвета 265
Резюме 266
Глава 18. Легенда о короле Артуре и контекст рисования
267
Класс QPainter 268
Перья и кисти 270
Перо 270
Кисть 271
Градиенты 272
Техника сглаживания (Anti-aliasing) 274
Рисование 275
Рисование точек 275
Рисование линий 275
Рисование сплошных прямоугольников 277
Рисование заполненных фигур 277
Запись команд рисования 281
Трансформация систем координат 281
Перемещение 282
Масштабирование 283
Поворот 283
Скос 283
Трансформационные матрицы 283
Графическая траектория (painter path) 284
Отсечения 285
Режим совмещения (composition mode) 286
Графические эффекты 289
Резюме 291
Глава 19. Растровые изображения
293
Форматы графических файлов 293
Формат BMP 293
Формат GIF 294
Формат PNG 294
Формат JPEG 294
Формат XPM 294
Контекстно-независимое представление 296
Класс QImage 296
Класс QImage как контекст рисования 303
Контекстно-зависимое представление 304
Класс QPixmap 305
Класс QPixmapCache 306
Класс QBitmap 306
Создание нестандартного окна виджета 307
Резюме 308
Глава 20. Работа со шрифтами
310
Отображение строки 312
Резюме 315
Глава 21. Графическое представление
316
Сцена 317
Представление 318
Элемент 319
События 321
Виджеты в графическом представлении 326
Резюме 328
Глава 22. Анимация
330
Класс QMovie 330
SVG-графика 332
Анимационный движок и машина состояний 333
Смягчающие линии 336
Машина состояний и переходы 341
Резюме 343
Глава 23. Работа с OpenGL
345
Основные положения OpenGL 345
Реализация OpenGL-программы 347
Разворачивание OpenGL-программ во весь экран 350
Графические примитивы OpenGL 350
Трехмерная графика 354
Резюме 358
Глава 24. Вывод на печать
359
Класс QPrinter 359
Резюме 364
Глава 25. Разработка собственных элементов управления
365
Примеры создания виджетов 365
Резюме 370
Глава 26. Элементы со стилем
371
Встроенные стили 373
Создание собственных стилей 377
Метод рисования простых элементов управления 378
Метод рисования элементов управления 378
Метод рисования составных элементов управления 378
Реализация стиля простого элемента управления 379
Использование каскадных стилей документа 382
Основные положения 383
Изменение подэлементов 385
Управление состояниями 386
Пример 387
Резюме 391
Глава 27. Мультимедиа
392
Звук 392
Воспроизведение WAV-файлов: класс QSound 393
Более продвинутые возможности воспроизведения звуковых файлов: класс QMediaPlayer 394
Видео и класс QMediaPlayer 401
Резюме 403
Часть V. Создание приложений
405
Глава 28. Сохранение настроек приложения
406
Резюме 413
Глава 29. Буфер обмена и перетаскивание
414
Буфер обмена 414
Перетаскивание 415
Реализация drag 417
Реализация drop 419
Создание собственных типов перетаскивания 421
Резюме 426
Глава 30. Интернационализация приложения
428
Подготовка приложения к интернационализации 428
Утилита lupdate 430
Программа Qt Linguist 431
Утилита lrelease. Пример программы, использующей перевод 433
Смена перевода в процессе работы программы 435
Завершающие размышления 437
Резюме 438
Глава 31. Создание меню
439
«Анатомия» меню 439
Контекстные меню 443
Резюме 444
Глава 32. Диалоговые окна
445
Правила создания диалоговых окон 445
Класс QDialog 446
Модальные диалоговые окна 446
Немодальные диалоговые окна 447
Создание собственного диалогового окна 447
Стандартные диалоговые окна 451
Диалоговое окно выбора файлов 451
Диалоговое окно настройки принтера 454
Диалоговое окно выбора цвета 455
Диалоговое окно выбора шрифта 457
Диалоговое окно ввода 458
Диалоговое окно процесса 459
Диалоговые окна мастера 460
Диалоговые окна сообщений 462
Окно информационного сообщения 464
Окно предупреждающего сообщения 464
Окно критического сообщения 465
Окно сообщения о программе 466
Окно сообщения About Qt 466
Окно сообщения об ошибке 467
Резюме 467
Глава 33. Предоставление помощи
469
Всплывающая подсказка 469
Система помощи (Online Help) 471
Резюме 473
Глава 34. Главное окно, создание SDI- и MDI-приложений
475
Класс главного окна QMainWindow 475
Класс действия QAction 476
Панель инструментов 477
Доки 479
Строка состояния 480
Окно заставки 482
SDI- и MDI-приложения 484
SDI-приложение 484
MDI-приложение 488
Резюме 496
Глава 35. Рабочий стол (Desktop)
497
Область уведомлений 497
Виджет экрана 502
Класс сервиса рабочего стола 506
Резюме 506
Часть VI. Особые возможности Qt
507
Глава 36. Работа с файлами, каталогами и потоками ввода/вывода
508
Ввод/вывод. Класс QIODevice 508
Работа с файлами. Класс QFile 510
Класс QBuffer 512
Класс QTemporaryFile 512
Работа с каталогами. Класс QDir 512
Просмотр содержимого каталога 513
Информация о файлах. Класс QFileInfo 516
Файл или каталог? 516
Путь и имя файла 517
Информация о дате и времени 517
Получение атрибутов файла 517
Определение размера файла 517
Наблюдение за файлами и каталогами 518
Потоки ввода/вывода 520
Класс QTextStream 521
Класс QDataStream 522
Резюме 523
Глава 37. Дата, время и таймер
524
Дата и время 524
Класс даты QDate 524
Класс времени QTime 526
Класс даты и времени QDateTime 527
Таймер 527
Событие таймера 528
Класс QTimer 530
Класс QBasicTimer 532
Резюме 532
Глава 38. Процессы и потоки
533
Процессы 533
Потоки 536
Приоритеты 538
Обмен сообщениями 539
Сигнально-слотовые соединения 540
Отправка событий 544
Синхронизация 547
Мьютексы 547
Семафоры 549
Ожидание условий 550
Блокировка чтения/записи 550
Возникновение тупиковых ситуаций 551
Фреймворк QtConcurrent 551
Резюме 553
Глава 39. Программирование поддержки сети
555
Сокетное соединение 555
Модель «клиент-сервер» 556
Реализация TCP-сервера 557
Реализация TCP-клиента 562
Реализация UDP-сервера и UDP-клиента 566
Управление доступом к сети 570
Блокирующий подход 577
Режим прокси 580
Информация о хосте 580
Есть ли соединение с Интернетом? 581
Резюме 581
Глава 40. Работа с XML
582
Основные понятия и структура XML-документа 582
XML и Qt 584
Работа с DOM 584
Чтение XML-документа 585
Создание и запись XML-документа 587
Работа с SAX 589
Чтение XML-документа 589
Класс QXmlStreamReader для чтения XML 592
Использование XQuery 594
Резюме 597
Глава 41. Программирование баз данных
599
Основные положения SQL 599
Создание таблицы 600
Операция вставки 600
Чтение данных 600
Изменение данных 601
Удаление 601
Использование языка SQL в библиотеке Qt 601
Соединение с базой данных (второй уровень) 603
Исполнение команд SQL (второй уровень) 604
Классы SQL-моделей для интервью (третий уровень) 607
Модель запроса 607
Табличная модель 608
Реляционная модель 610
Резюме 611
Глава 42. Динамические библиотеки и система расширений
613
Динамические библиотеки 613
Динамическая загрузка и выгрузка библиотеки 614
Расширения (plug-ins) 617
Расширения для Qt 617
Поддержка собственных расширений в приложениях 619
Создание расширения для приложения 623
Резюме 625
Глава 43. Совместное использование Qt с платформозависимыми API
627
Совместное использование с Windows API 629
Совместное использование с Linux 632
Совместное использование с Mac OS X 632
Системная информация 637
Резюме 639
Глава 44. Qt Designer. Быстрая разработка прототипов
640
Создание новой формы в Qt Designer 640
Добавление виджетов 643
Компоновка (layout) 644
Порядок следования табулятора 645
Сигналы и слоты 646
Использование в формах собственных виджетов 648
Использование форм в проектах 648
Компиляция 651
Динамическая загрузка формы 651
Резюме 654
Глава 45. Проведение тестов
655
Создание тестов 656
Тесты с передачей данных 659
Создание тестов графического интерфейса 661
Параметры для запуска тестов 663
Резюме 664
Глава 46. Qt WebEngine
665
А зачем? 666
Быстрый старт 667
Создание простого веб-браузера 669
Ввод адресов 669
Управление историей 669
Загрузка страниц и ресурсов 670
Пишем веб-браузер: попытка номер два 670
Резюме 674
Глава 47. Интегрированная среда разработки Qt Creator
675
Первый запуск 676
Создаем проект «Hello Qt Creator» 677
Пользовательский интерфейс Qt Creator 681
Окна вывода 682
Окно проектного обозревателя 682
Секция компилирования и запуска 682
Редактирование текста 685
Как подсвечен ваш синтаксис? 685
Скрытие и отображение кода 686
Автоматическое дополнение кода 686
Поиск и замена 687
Комбинации клавиш для ускорения работы 691
Вертикальное выделение текста 691
Автоматическое форматирование текста 691
Комментирование блоков 692
Просмотр кода методов класса, их определений и атрибутов 692
Помощь, которая всегда рядом 693
Интерактивный отладчик и программный экзорцизм 694
Синтаксические ошибки 695
Ошибки компоновки 696
Ошибки времени исполнения 696
Логические ошибки 697
Трассировка 697
Команда Step Over 698
Команда Step Into 698
Команда Step Out 699
Контрольные точки 699
Окно переменных (Local and Watches) 700
Окно цепочки вызовов (Call Stack) 701
Резюме 701
Глава 48. Рекомендации по миграции программ из Qt 4 в Qt 5
703
Основные отличия Qt 5 от Qt 4 703
Подробности перевода на Qt 5 703
Виджеты 704
Контейнерные классы 704
Функция qFindChildren< T>() 705
Сетевые классы 705
WebKit 705
Платформозависимый код 705
Система расширений Plug-ins 705
Принтер QPrinter 706
Мультимедиа 706
Модульное тестирование 706
Реализация обратной совместимости Qt 5 с Qt 4 706
Резюме 709
Часть VII. Язык сценариев JavaScript
711
Глава 49. Основы поддержки сценариев JavaScript
712
Принцип взаимодействия с языком сценариев 713
Первый шаг использования сценария 716
Привет, сценарий 717
Резюме 718
Глава 50. Синтаксис языка сценариев
720
Зарезервированные ключевые слова 720
Комментарии 721
Переменные 721
Предопределенные типы данных 722
Целый тип 722
Вещественный тип 722
Строковый тип 723
Логический тип 723
Преобразование типов 723
Операции 725
Операторы присваивания 725
Арифметические операции 725
Поразрядные операции 726
Операции сравнения 726
Приоритет выполнения операций 727
Управляющие структуры 728
Условные операторы 728
Оператор if ... else 728
Оператор switch 729
Оператор условного выражения 730
Циклы 730
Операторы break и continue 730
Цикл for 730
Цикл while 731
Цикл do...while 731
Оператор with 732
Исключительные ситуации 732
Оператор try...catch 732
Оператор throw 733
Функции 733
Встроенные функции 735
Объектная ориентация 735
Статические классы 738
Наследование 738
Перегрузка методов 741
Сказание о «джейсоне» 742
Резюме 743
Глава 51. Встроенные объекты JavaScript
744
Объект Global 744
Объект Number 744
Объект Boolean 744
Объект String 745
Замена 745
Получение символов 745
Получение подстроки 745
Объект RegExp 745
Проверка строки 746
Поиск позиции совпадений 746
Найденное совпадение 746
Объект Array 746
Дополнение массива элементами 747
Адресация элементов 747
Изменение порядка элементов массива 747
Преобразование массива в строку 748
Объединение массивов 748
Упорядочивание элементов 748
Многомерные массивы 748
Объект Date 749
Объект Маth 750
Модуль числа 750
Округление 751
Определение максимума и минимума 751
Возведение в степень 751
Вычисление квадратного корня 751
Генератор случайных чисел 752
Тригонометрические методы 752
Вычисление натурального логарифма 752
Объект Function 753
Резюме 753
Глава 52. Классы поддержки JavaScript и практические примеры
754
Класс QJSValue 754
Класс QJSEngine 754
Практические примеры 755
«Черепашья» графика 755
Сигналы, слоты и функции 762
Полезные дополнительные функции 765
Резюме 769
Часть VIII. Технология Qt Quick
771
Глава 53. Знакомство с Qt Quick
772
А зачем? 772
Введение в QML 774
Быстрый старт 776
Использование JavaScript в QML 782
Резюме 783
Глава 54. Элементы
785
Визуальные элементы 785
Свойства элементов 788
Собственные свойства 790
Создание собственных элементов 793
Создание собственных модулей 795
Динамическое создание элементов 795
Элемент Flickable 796
Готовые элементы пользовательского интерфейса 797
Диалоговые окна 802
Резюме 805
Глава 55. Управление размещением элементов
806
Фиксаторы 806
Традиционные размещения 813
Размещение в виде потока 817
Резюме 819
Глава 56. Элементы графики
820
Цвета 820
Растровые изображения 821
Элемент Image 821
Элемент BorderImage 825
Градиенты 826
Шрифты 828
Рисование на элементах холста 828
Шейдеры и эффекты 833
Резюме 837
Глава 57. Пользовательский ввод
838
Область мыши 838
Сигналы 841
Ввод с клавиатуры 845
Фокус 846
«Сырой» ввод 848
Мультитач 850
Резюме 852
Глава 58. Анимация
853
Анимация при изменении свойств 853
Анимация для изменения числовых значений 855
Анимация с изменением цвета 856
Анимация с поворотом 857
Анимации поведения 858
Параллельные и последовательные анимации 860
Состояния и переходы 863
Состояния 863
Переходы 866
Модуль частиц 868
Резюме 872
Глава 59. Модель/Представление
873
Модели 873
Модель списка 873
XML-модель 874
JSON-модель 876
Представление данных моделей 877
Элемент ListView 877
Элемент GridView 880
Элемент PathView 882
Визуальная модель данных 884
Резюме 886
Глава 60. Qt Quick и C++
888
Использование языка QML в C++ 888
Взаимодействие из C++ со свойствами QML-элементов и вызов их функций 889
Соединение QML-сигналов со слотами C++ 891
Использование компонентов языка C++ в QML 894
Экспорт объектов и виджетов из C++ в QML 895
Использование зарегистрированных объектов C++, их свойств и методов в QML 897
Реализация визуальных элементов QML на C++ 901
Класс QQuickImageProvider 904
Резюме 909
Глава 61. 3D-графика Qt 3D
910
Основы 910
Cвет 911
Камера 912
3D-объекты 913
Материалы 916
Трансформация 919
Анимация 921
Qt 3D Studio 923
Резюме 924
Часть IX. Мобильные приложения и Qt
927
Глава 62. Введение в мир мобильных приложений
928
Смартфоны меняют все 928
Виртуальные магазины приложений 930
Распространение приложений вне виртуального магазина 932
Qt и разработка мобильных приложений 932
Резюме 934
Глава 63. Подготовка к работе над мобильными приложениями
935
Подготовка среды для разработки iOS-приложений 935
Подготовка среды для разработки Android приложений 938
Запуск приложений на реальном устройстве 945
Резюме 946
Глава 64. Особенности разработки приложений для мобильных устройств
948
Анатомия файлов свойств для iOS- и Android-приложений 949
Файл свойств iOS-приложений 949
Файл свойств Android-приложений 951
Полноэкранный режим 955
iOS-реализация 956
Android-реализация 956
Автоматический поворот 956
Конфигурирование приложений для поддержки поворота 957
iOS-реализация 957
Android-реализация 958
Обработка поворота в приложениях 958
Сенсоры 960
Пользовательский ввод при помощи пальцев 964
Положение рук 967
Резюме 967
Глава 65. Пример разработки мобильного приложения
969
Обдумывание и планирование приложения 969
Название приложения 970
Значок приложения 970
Что будет в первой версии? 971
Пишем код 973
Добавление к приложению значков и стартовых экранов 980
iOS-реализация 980
Android-реализация 982
Резюме 983
Глава 66. Публикация в магазине мобильных приложений
984
Этапы работы для App Store 984
Регистрация 984
Настройки для запуска приложений на реальных устройствах 985
Создание электронной подписи 991
Создание страницы приложения 992
Загрузка и публикация приложения 998
Этапы работы для Google Play 1000
Регистрация 1001
Создание страницы приложения 1001
Создание электронной подписи 1005
Загрузка и публикация приложения 1007
Резюме 1009
Приложения 1011
Приложение 1. Настройка среды для работы над Qt-приложениями 1012
Настройка среды для Mac OS X 1012
Настройка среды для Windows 1013
Настройка среды для Ubuntu Linux 1015
Приложение 2. Таблица простых чисел 1018
Приложение 3. Таблицы семибитной кодировки ASCII 1021
Приложение 4. Описание архива с примерами 1024
Предметный указатель 1034