Полное содержание

Предисловие Маттиаса Эттриха 20
Благодарности 22
Предисловие 23
Структура книги 23
Введение 32

Часть I. Основы Qt
43
Глава 1. Обзор иерархии классов Qt
45
Первая программа на Qt 45
Модули Qt 46
Пространство имен Qt 48
Модуль QtCore 48
Модуль QtGui 49
Модуль QtWidgets 49
Модули QtQuick и QtQML 50
Модуль QtNetwork 51
Модули QtXml и QtXmlPatterns 51
Модуль QtSql 51
Модуль QtOpenGL 51
Модули QtWebKit и QtWebKitWidgets 51
Модули QtMultimedia и QtMultimediaWidgets 51
Модули QtScript и QtScriptTools 51
Модуль QtSvg 52
Резюме 52
Глава 2. Философия объектной модели
53
Механизм сигналов и слотов 55
Сигналы 58
Слоты 60
Соединение объектов 61
Разъединение объектов 66
Переопределение сигналов 67
Организация объектных иерархий 68
Метаобъектная информация 70
Резюме 71
Глава 3. Работа с Qt
72
Интегрированная среда разработки 72
Qt Assistant 72
Работа с qmake 72
Рекомендации для проекта с Qt 76
Метаобъектный компилятор MOC 77
Компилятор ресурсов RCC 78
Структура Qt-проекта 79
Методы отладки 79
Отладчик GDB (GNU Debugger) 80
Прочие методы отладки 83
Глобальные определения Qt 86
Информация о библиотеке Qt 87
Резюме 89
Глава 4. Библиотека контейнеров
90
Контейнерные классы 91
Итераторы 92
Итераторы в стиле Java 93
Итераторы в стиле STL 94
Ключевое слово foreach 96
Последовательные контейнеры 96
Вектор QVector 97
Массив байтов QByteArray 98
Массив битов QBitArray 99
Списки QList и QLinkedList 99
Стек QStack 101
Очередь QQueue 101
Ассоциативные контейнеры 102
Словари QMap и QMultiMap 103
Хэши QHash и QMultiHash 104
Множество QSet 105
Алгоритмы 107
Сортировка 108
Поиск 109
Сравнение 109
Заполнение значениями 109
Строки 110
Регулярные выражения 111
Произвольный тип QVariant 113
Модель общего использования данных 114
Резюме 115

Часть II. Элементы управления
117
Глава 5. С чего начинаются элементы управления?
119
Класс QWidget 119
Размеры и координаты виджета 122
Механизм закулисного хранения 123
Установка фона виджета 123
Изменение указателя мыши 124
Стек виджетов 127
Рамки 127
Виджет видовой прокрутки 128
Резюме 130
Глава 6. Управление автоматическим размещением элементов
131
Менеджеры компоновки (layout managers) 131
Горизонтальное и вертикальное размещение 133
Класс QBoxLayout 133
Горизонтальное размещение QHBoxLayout 135
Вертикальное размещение QVBoxLayout 136
Вложенные размещения 137
Табличное размещение QGridLayout 138
Порядок следования табулятора 144
Разделители QSplitter 144
Резюме 145
Глава 7. Элементы отображения
146
Надписи 146
Индикатор процесса 150
Электронный индикатор 153
Резюме 155
Глава 8. Кнопки, флажки и переключатели
156
С чего начинаются кнопки? Класс QAbstractButton 156
Установка текста и изображения 156
Взаимодействие с пользователем 156
Опрос состояния 157
Кнопки 157
Флажки 160
Переключатели 161
Группировка кнопок 162
Резюме 165
Глава 9. Элементы настройки
166
Класс QAbstractSlider 166
Изменение положения 166
Установка диапазона 166
Установка шага 167
Установка и получение значений 167
Ползунок 167
Полоса прокрутки 169
Установщик 170
Резюме 172
Глава 10. Элементы ввода
173
Однострочное текстовое поле 173
Редактор текста 175
Запись в файл 178
Расцветка синтаксиса (syntax highlighting) 178
С чего начинаются виджеты счетчиков? 184
Счетчик 185
Элемент ввода даты и времени 186
Проверка ввода 187
Резюме 188
Глава 11. Элементы выбора
189
Простой список 189
Вставка элементов 189
Выбор элементов пользователем 191
Изменение элементов пользователем 191
Режим пиктограмм 191
Сортировка элементов 192
Иерархические списки 193
Сортировка элементов 196
Таблицы 196
Выпадающий список 198
Вкладки 199
Виджет панели инструментов 200
Резюме 201
Глава 12. Интервью, или модель-представление
202
Концепция 203
Модель 203
Представление 205
Выделение элемента 206
Делегат 208
Индексы модели 210
Иерархические данные 210
Роли элементов 214
Создание собственных моделей данных 215
Промежуточная модель данных (Proxy model) 222
Модель элементно-ориентированных классов 224
Резюме 226
Глава 13. Цветовая палитра элементов управления
227
Резюме 230
Часть III. События и взаимодействие с пользователем
231
Глава 14. События
233
Переопределение специализированных методов обработки событий 235
События клавиатуры 235
Класс QKeyEvent 235
Класс QFocusEvent 238
Событие обновления контекста рисования. Класс QPaintEvent 238
События мыши 239
Класс QMouseEvent 239
Класс QWheelEvent 243
Методы enterEvent() и leaveEvent() 243
Событие таймера. Класс QTimerEvent 243
События перетаскивания (drag & drop) 244
Класс QDragEnterEvent 244
Класс QDragLeaveEvent 244
Класс QDragMoveEvent 244
Класс QDropEvent 244
Остальные классы событий 244
Класс QChildEvent 244
Класс QCloseEvent 244
Класс QHideEvent 245
Класс QMoveEvent 245
Класс QShowEvent 245
Класс QResizeEvent 245
Реализация собственных классов событий 246
Переопределение метода event() 247
Сохранение работоспособности приложения 250
Резюме 251
Глава 15. Фильтры событий
252
Реализация фильтров событий 252
Резюме 255
Глава 16. Искусственное создание событий
256
Резюме 259
Часть IV. Графика и звук
261
Глава 17. Введение в компьютерную графику
263
Классы геометрии 263
Точка 263
Двумерный размер 264
Прямоугольник 266
Прямая линия 266
Многоугольник 267
Цвет 267
Класс QСolor 267
Цветовая модель RGB 268
Цветовая модель HSV 269
Цветовая модель CMYK 270
Палитра 271
Предопределенные цвета 272
Резюме 273
Глава 18. Легенда о короле Артуре и контекст рисования
274
Класс QPainter 275
Перья и кисти 277
Перо 277
Кисть 278
Градиенты 279
Техника сглаживания (Anti-aliasing) 280
Рисование 281
Рисование точек 281
Рисование линий 282
Рисование сплошных прямоугольников 283
Рисование заполненных фигур 283
Запись команд рисования 286
Трансформация систем координат 286
Перемещение 287
Масштабирование 288
Поворот 288
Скос 288
Трансформационные матрицы 288
Графическая траектория (painter path) 289
Отсечения 290
Режим совмещения (composition mode) 291
Графические эффекты 294
Резюме 296
Глава 19. Растровые изображения
297
Форматы графических файлов 297
Формат BMP 297
Формат GIF 298
Формат PNG 298
Формат JPEG 298
Формат XPM 298
Контекстно-независимое представление 300
Класс QImage 300
Класс QImage как контекст рисования 307
Контекстно-зависимое представление 308
Класс QPixmap 308
Класс QPixmapCache 310
Класс QBitmap 310
Использование масок для QPixmap 310
Создание нестандартного окна виджета 311
Резюме 314
Глава 20. Работа со шрифтами
316
Отображение строки 318
Резюме 321
Глава 21. Графическое представление
322
Сцена 324
Представление 324
Элемент 325
События 327
Виджеты в графическом представлении 333
Резюме 335
Глава 22. Анимация
336
Класс QMovie 336
SVG-графика 338
Анимационный движок и машина состояний 339
Смягчающие линии 342
Машина состояний и переходы 346
Резюме 349
Глава 23. Работа с OpenGL
350
Основные положения OpenGL 350
Классы Qt для работы с OpenGL 352
Реализация OpenGL-программы 352
Разворачивание OpenGL-программ во весь экран 355
Графические примитивы OpenGL 356
Трехмерная графика 359
Резюме 363
Глава 24. Вывод на печать
364
Класс QPrinter 364
Резюме 369
Глава 25. Разработка собственных элементов управления
370
Примеры создания виджетов 370
Резюме 375
Глава 26. Элементы со стилем
376
Встроенные стили 378
Создание собственных стилей 382
Метод рисования простых элементов управления 383
Метод рисования элементов управления 383
Метод рисования составных элементов управления 384
Реализация стиля простого элемента управления 384
Использование QStyle для рисования виджетов 388
Использование каскадных стилей документа 388
Основные положения 389
Изменение подэлементов 390
Управление состояниями 391
Пример 392
Резюме 396
Глава 27. Мультимедиа
397
Звук 397
Воспроизведение WAV-файлов: класс QSound 398
Более продвинутые возможности воспроизведения звуковых файлов: класс QMediaPlayer 399
Видео и класс QMediaPlayer 406
Резюме 408
Часть V. Создание приложений
409
Глава 28. Сохранение настроек приложения
411
Управление сеансом 418
Резюме 420
Глава 29. Буфер обмена и перетаскивание
421
Буфер обмена 421
Перетаскивание 422
Реализация drag 424
Реализация drop 426
Создание собственных типов перетаскивания 428
Резюме 433
Глава 30. Интернационализация приложения
435
Подготовка приложения к интернационализации 435
Утилита lupdate 437
Программа Qt Linguist 438
Утилита lrelease. Пример программы, использующей перевод 439
Смена перевода в процессе работы программы 441
Завершающие размышления 443
Резюме 444
Глава 31. Создание меню
445
«Анатомия» меню 445
Отрывные меню 449
Контекстные меню 450
Резюме 451
Глава 32. Диалоговые окна
452
Правила создания диалоговых окон 452
Класс QDialog 453
Модальные диалоговые окна 453
Немодальные диалоговые окна 454
Создание собственного диалогового окна 454
Стандартные диалоговые окна 458
Диалоговое окно выбора файлов 458
Диалоговое окно настройки принтера 460
Диалоговое окно выбора цвета 461
Диалоговое окно выбора шрифта 462
Диалоговое окно ввода 463
Диалоговое окно процесса 464
Диалоговые окна мастера 465
Диалоговые окна сообщений 466
Окно информационного сообщения 468
Окно предупреждающего сообщения 469
Окно критического сообщения 469
Окно сообщения о программе 470
Окно сообщения About Qt 470
Окно сообщения об ошибке 471
Резюме 471
Глава 33. Предоставление помощи
473
Всплывающая подсказка 473
Подсказка «Что это» 475
Система помощи (Online Help) 476
Резюме 478
Глава 34. Главное окно, создание SDI- и MDI-приложений
480
Класс главного окна QMainWindow 480
Класс действия QAction 481
Панель инструментов 482
Доки 484
Строка состояния 485
Окно заставки 487
SDI- и MDI-приложения 489
SDI-приложение 489
MDI-приложение 493
Резюме 501
Глава 35. Рабочий стол (Desktop)
502
Область уведомлений 502
Виджет экрана 507
Класс сервиса рабочего стола 511
Резюме 511
Часть VI. Особые возможности Qt
513
Глава 36. Работа с файлами, каталогами и потоками ввода/вывода
515
Ввод/вывод. Класс QIODevice 515
Работа с файлами. Класс QFile 517
Класс QBuffer 518
Класс QTemporaryFile 519
Работа с каталогами. Класс QDir 519
Просмотр содержимого каталога 520
Информация о файлах. Класс QFileInfo 523
Файл или каталог? 523
Путь и имя файла 524
Информация о дате и времени 524
Получение атрибутов файла 524
Определение размера файла 524
Наблюдение за файлами и каталогами 525
Потоки ввода/вывода 527
Класс QTextStream 527
Класс QDataStream 529
Резюме 529
Глава 37. Дата, время и таймер
531
Дата и время 531
Класс даты QDate 531
Класс времени QTime 533
Класс даты и времени QDateTime 534
Таймер 534
Событие таймера 535
Класс QTimer 537
Класс QBasicTimer 539
Резюме 539
Глава 38. Процессы и потоки
540
Процессы 540
Потоки 543
Приоритеты 545
Обмен сообщениями 545
Сигнально-слотовые соединения 546
Отправка событий 551
Синхронизация 554
Мьютексы 554
Семафоры 556
Ожидание условий 556
Возникновение тупиковых ситуаций 557
Фреймворк QtConcurrent 557
Резюме 559
Глава 39. Программирование поддержки сети
561
Сокетное соединение 561
Модель «клиент-сервер» 562
Реализация TCP-сервера 563
Реализация TCP-клиента 568
Реализация UDP-сервера и UDP-клиента 572
Управление доступом к сети 576
Блокирующий подход 583
Режим прокси 585
Резюме 586
Глава 40. Работа с XML
587
Основные понятия и структура XML-документа 587
XML и Qt 589
Работа с DOM 589
Чтение XML-документа 590
Создание и запись XML-документа 592
Работа с SAX 594
Чтение XML-документа 594
Класс QXmlStreamReader для чтения XML 597
Использование XQuery 599
Резюме 602
Глава 41. Программирование баз данных
603
Основные положения SQL 603
Создание таблицы 604
Операция вставки 604
Чтение данных 604
Изменение данных 605
Удаление 605
Использование языка SQL в библиотеке Qt 605
Соединение с базой данных (второй уровень) 607
Исполнение команд SQL (второй уровень) 608
Классы SQL-моделей для интервью (третий уровень) 611
Модель запроса 612
Табличная модель 613
Реляционная модель 615
Резюме 616
Глава 42. Динамические библиотеки и система расширений
617
Динамические библиотеки 617
Динамическая загрузка и выгрузка библиотеки 618
Расширения (plug-ins) 621
Расширения для Qt 621
Поддержка собственных расширений в приложениях 623
Создание расширения для приложения 627
Резюме 629
Глава 43. Совместное использование Qt с платформозависимыми API
630
Совместное использование с Windows API 632
Совместное использование с Linux 635
Совместное использование с Mac OS X 635
Системная информация 639
Резюме 641
Глава 44. Qt Designer. Быстрая разработка прототипов
642
Создание новой формы в Qt Designer 642
Добавление виджетов 645
Компоновка (layout) 646
Порядок следования табулятора 647
Сигналы и слоты 648
Использование в формах собственных виджетов 650
Использование форм в проектах 650
Компиляция 652
Динамическая загрузка формы 653
Резюме 655
Глава 45. Проведение тестов
657
Создание тестов 658
Тесты с передачей данных 661
Создание тестов графического интерфейса 663
Параметры для запуска тестов 664
Резюме 665
Глава 46. WebKit
666
Путешествие к истокам 667
А зачем? 668
Быстрый старт 668
Написание простого Web-браузера 670
Ввод адресов 670
Управление историей 670
Загрузка страниц и ресурсов 671
Пишем Web-браузер, попытка номер два 671
Резюме 676
Глава 47. Интегрированная среда разработки Qt Creator
677
Первый запуск 678
Создаем проект «Hello Qt Creator» 679
Пользовательский интерфейс Qt Creator 684
Окна вывода 685
Окно проектного обозревателя 685
Секция компилирования и запуска 685
Редактирование текста 688
Как подсвечен ваш синтаксис? 688
Скрытие и отображение кода 688
Автоматическое дополнение кода 689
Поиск и замена 689
Комбинации клавиш для ускорения работы 694
Вертикальное выделение текста 694
Автоматическое форматирование текста 694
Комментирование блоков 694
Просмотр кода методов класса их определения и атрибутов 695
Помощь, которая всегда рядом 695
Использование стороннего редактора 696
Интерактивный отладчик и программный экзорцизм 696
Синтаксические ошибки 697
Ошибки компоновки 698
Ошибки времени исполнения 699
Логические ошибки 699
Трассировка 699
Команда Step Over 700
Команда Step Into 701
Команда Step Out 701
Контрольные точки 701
Окно переменных (Local and Watches) 702
Окно цепочки вызовов (Call Stack) 703
Резюме 703
Глава 48. Рекомендации по миграции программ из Qt 4 в Qt 5
705
Основные отличия Qt 5 от Qt 4 705
Подробности перевода на Qt 5 705
Виджеты 706
Контейнерные классы 706
Функция qFindChildren() 707
Сетевые классы 707
WebKit 707
Платформозависимый код 707
Система расширений Plug-ins 707
Принтер QPrinter 708
Мультимедиа 708
Модульное тестирование 708
Реализация обратной совместимости Qt 5 с Qt 4 708
Резюме 711
Часть VII. Язык сценариев Qt Script
713
Глава 49. Основы поддержки сценариев
715
Принцип взаимодействия с языком сценариев 716
Первый шаг использования сценария 719
Привет, сценарий 720
Резюме 721
Глава 50. Синтаксис языка сценариев
723
Зарезервированные ключевые слова 723
Комментарии 724
Переменные 724
Предопределенные типы данных 725
Целый тип 725
Вещественный тип 725
Строковый тип 726
Логический тип 726
Преобразование типов 726
Константы 728
Операции 728
Операторы присваивания 728
Арифметические операции 728
Поразрядные операции 729
Операции сравнения 730
Приоритет выполнения операций 731
Управляющие структуры 732
Условные операторы 732
Оператор if ... else 732
Оператор switch 733
Оператор условного выражения 733
Циклы 734
Операторы break и continue 734
Цикл for 734
Цикл while 734
Цикл do...while 735
Оператор with 735
Исключительные ситуации 735
Оператор try...catch 736
Оператор throw 736
Функции 737
Встроенные функции 738
Объектная ориентация 739
Статические классы 741
Наследование 742
Перегрузка методов 744
Сказание о «джейсоне» 744
Резюме 745
Глава 51. Встроенные объекты Qt Script
746
Объект Global 746
Объект Number 746
Объект Boolean 746
Объект String 747
Преобразование строки к нижнему и верхнему регистрам 747
Замена 747
Получение символов 747
Получение подстроки 747
Объект RegExp 747
Проверка строки 748
Поиск совпадений 748
Объект Array 748
Дополнение массива элементами 749
Адресация элементов 749
Изменение порядка элементов массива 749
Преобразование массива в строку 750
Объединение массивов 750
Упорядочивание элементов 750
Многомерные массивы 750
Объект Date 751
Объект Маth 752
Модуль числа 752
Округление 753
Определение максимума и минимума 753
Возведение в степень 753
Вычисление квадратного корня 753
Генератор случайных чисел 754
Тригонометрические методы 754
Вычисление натурального логарифма 754
Объект Function 755
Резюме 755
Глава 52. Классы поддержки Qt Script и практические примеры
756
Класс QScriptValue 756
Класс QScriptContext 756
Класс QScriptEngine 757
Практические примеры 759
«Черепашья» графика 760
Сигналы, слоты и функции 767
Отладчик Qt Script 770
Резюме 773
Часть VIII. Технология Qt Quick
775
Глава 53. Знакомство с Qt Quick
777
А зачем? 777
Введение в QML 779
Быстрый старт 779
Использование JavaScript в QML 783
Резюме 784
Глава 54. Элементы
786
Визуальные элементы 786
Свойства элементов 788
Собственные свойства 790
Создание собственных элементов 792
Готовые элементы пользовательского интерфейса 794
Диалоговые окна 797
Резюме 799
Глава 55. Управление размещением элементов
800
Фиксаторы 800
Традиционные размещения 807
Резюме 811
Глава 56. Элементы графики
812
Цвета 812
Растровые изображения 813
Элемент Image 813
Элемент BorderImage 816
Градиенты 817
Шрифты 818
Рисование на элементах холста 819
Резюме 821
Глава 57. Пользовательский ввод
822
Область мыши 822
Сигналы 825
Ввод с клавиатуры 829
Фокус 830
«Сырой» ввод 832
Резюме 834
Глава 58. Анимация
835
Анимация при изменении свойств 835
Анимация для изменения числовых значений 837
Анимация с изменением цвета 838
Анимация с поворотом 839
Анимации поведения 840
Параллельные и последовательные анимации 842
Состояния и переходы 845
Состояния 845
Переходы 848
Резюме 851
Глава 59. Модель/Представление
852
Модели 852
Модель списка 852
XML-модель 853
Представление данных моделей 855
Элемент Flickable 855
Элемент ListView 856
Элемент GridView 858
Элемент PathView 860
Резюме 863
Глава 60. Qt Quick и C++
864
Использование языка QML в C++ 864
Использование компонентов языка C++ в QML 865
Резюме 877
Эпилог 878

Приложения 879
Приложение 1. Таблицы семибитной кодировки ASCII 881
Приложение 2. Таблица простых чисел 884
Приложение 3. Глоссарий 887
Приложение 4. Описание архива с примерами 891
Предметный указатель 901