Оглавление Предисловие Маттиаса Эттриха 3
Благодарности 5
Предисловие 6
Структура книги 6
Введение 16
Часть I. Основы Qt 25
Глава 1. Обзор иерархии классов Qt 27
Первая программа на Qt 27
Модули Qt 28
Пространство имен Qt 30
Модуль QtCore 30
Модуль QtGui 31
Модуль QtNetwork 32
Модуль QtXml 32
Модуль QtSql 33
Модуль QtOpenGL 33
Модуль QtWebKit 33
Модуль QtSvg 33
Модуль Qt3Support 33
Резюме 33
Глава 2. Философия объектной модели 34
Механизм сигналов и слотов 36
Сигналы 39
Слоты 41
Соединение объектов 42
Разъединение объектов 46
Организация объектных иерархий 47
Метаобъектная информация 49
Резюме 50
Глава 3. Работа с Qt 51
Интегрированная среда разработки IDE 51
Qt Assistant 51
Работа с qmake 51
Рекомендации для проекта с Qt 55
Метаобъектный компилятор MOC 56
Компилятор ресурсов RCC 57
Структура Qt-проекта 57
Методы отладки 58
Отладчик GDB (GNU Debugger) 59
Прочие методы отладки 62
Глобальные определения Qt 63
Информация о библиотеке Qt 65
Резюме 66
Глава 4. Библиотека контейнеров 67
Контейнерные классы 68
Итераторы 70
Итераторы в стиле Java 70
Итераторы в стиле STL 71
Ключевое слово foreach 73
Последовательные контейнеры 73
Вектор QVector 74
Массив байтов QByteArray 75
Массив битов QBitArray 76
Списки QList, QLinkedList 76
Стек QStack 78
Очередь QQueue 79
Ассоциативные контейнеры 79
Словари QMap, QMultiMap 80
Хэши QHash и QMultiHash 82
Множество QSet 82
Алгоритмы 84
Сортировка 85
Поиск 85
Сравнение 86
Заполнение значениями 86
Строки 86
Регулярные выражения 88
Произвольный тип QVariant 90
Модель общего использования данных 91
Резюме 92
Часть II. Элементы управления 93
Глава 5. С чего начинаются элементы управления 95
Класс QWidget 95
Размеры и координаты виджета 98
Механизм закулисного хранения 99
Установка фона виджета 99
Изменение указателя мыши 100
Стек виджетов 103
Рамки 103
Виджет видовой прокрутки 104
Резюме 106
Глава 6. Управление автоматическим размещением элементов 107
Менеджеры компоновки (layout managers) 107
Горизонтальное и вертикальное размещения 109
Класс QBoxLayout 109
Горизонтальное размещение QHBoxLayout 111
Вертикальное размещение QVBoxLayout 112
Вложенные размещения 113
Табличное размещение QGridLayout 114
Порядок следования табулятора 120
Разделители QSplitter 120
Резюме 121
Глава 7. Элементы отображения 122
Надписи 122
Индикатор прогресса 126
Электронный индикатор 129
Резюме 131
Глава 8. Кнопки, флажки и переключатели 132
С чего начинаются кнопки. Класс QAbstractButton 132
Установка текста и изображения 132
Взаимодействие с пользователем 132
Опрос состояния 133
Кнопки 133
Флажки 136
Переключатели 137
Группировка кнопок 138
Резюме 141
Глава 9. Элементы настройки 143
Класс QAbstractSlider 143
Изменение положения 143
Установка диапазона 143
Установка шага 144
Установка и получение значений 144
Ползунок 144
Полоса прокрутки 146
Установщик 147
Резюме 149
Глава 10. Элементы ввода 150
Однострочное текстовое поле 150
Редактор текста 152
Запись в файл 155
Расцветка синтаксиса (syntax highlighting) 155
С чего начинаются виджеты счетчиков 162
Счетчик 162
Элемент ввода даты и времени 163
Проверка ввода 164
Резюме 165
Глава 11. Элементы выбора 167
Простой список 167
Вставка элементов 167
Выбор элементов пользователем 169
Изменение элементов пользователем 169
Режим пиктограмм 169
Сортировка элементов 170
Иерархические списки 171
Сортировка элементов 174
Таблицы 174
Выпадающий список 176
Вкладки 177
Виджет панели инструментов 178
Резюме 179
Глава 12. Интервью или модель-представление 180
Концепция 181
Модель 181
Представление 183
Выделение элемента 184
Делегат 186
Индексы модели 188
Иерархические данные 188
Роли элементов 192
Создание собственных моделей данных 194
Промежуточная модель данных (Proxy model) 200
Модель элементно-базированных классов 202
Резюме 204
Глава 13. Цветовая палитра элементов управления 205
Резюме 208
Часть III. События и взаимодействие с пользователем 209
Глава 14. События 211
Переопределение специализированных методов обработки событий 213
События клавиатуры 213
Класс QKeyEvent 213
Класс QFocusEvent 216
Событие обновления контекста рисования. Класс QPaintEvent 216
События мыши 217
Класс QMouseEvent 217
Класс QWheelEvent 221
Методы enterEvent() и leaveEvent() 221
Событие таймера. Класс QTimerEvent 221
События перетаскивания (drag & drop) 222
Класс QDragEnterEvent 222
Класс QDragLeaveEvent 222
Класс QDragMoveEvent 222
Класс QDropEvent 222
Остальные классы событий 222
Класс QChildEvent 222
Класс QCloseEvent 222
Класс QHideEvent 223
Класс QMoveEvent 223
Класс QShowEvent 223
Класс QResizeEvent 223
Реализация собственных классов событий 224
Переопределение метода event() 225
Сохранение работоспособности приложения 228
Резюме 229
Глава 15. Фильтры событий 230
Реализация фильтров событий 230
Резюме 233
Глава 16. Искусственное создание событий 234
Резюме 237
Часть IV. Графика и звук 239
Глава 17. Введение в компьютерную графику 241
Классы геометрии 241
Точка 241
Двумерный размер 242
Прямоугольник 244
Прямая линия 244
Полигон 245
Цвет 245
Класс QСolor 245
Цветовая модель RGB 246
Цветовая модель HSV 247
Цветовая модель CMYK 248
Палитра 249
Предопределенные цвета 250
Резюме 251
Глава 18. Легенда о короле Артуре и контексте рисования 252
Класс QPainter 253
Перья и кисти 255
Перо 255
Кисть 256
Градиенты 257
Техника сглаживания (Anti-aliasing) 258
Рисование 259
Рисование точек 259
Рисование линий 260
Рисование сплошных прямоугольников 261
Рисование заполненных фигур 261
Запись команд рисования 264
Трансформация систем координат 264
Перемещение 265
Масштабирование 266
Поворот 266
Скос 266
Трансформационные матрицы 266
Графическая траектория (painter path) 267
Отсечения 268
Режим совмещения (composition mode) 269
Графические эффекты 272
Резюме 274
Глава 19. Растровые изображения 275
Форматы графических файлов 275
Формат BMP 275
Формат GIF 276
Формат PNG 276
Формат JPEG 276
Формат XPM 276
Контекстно-независимое представление 278
Класс QImage 278
Класс QImage как контекст рисования 285
Контекстно-зависимое представление 286
Класс QPixmap 286
Класс QPixmapCache 287
Класс QBitmap 288
Использование масок для QPixmap 288
Создание нестандартного окна виджета 290
Резюме 292
Глава 20. Работа со шрифтами 294
Отображение строки 296
Резюме 299
Глава 21. Графическое представление 300
Сцена 301
Представление 301
Элемент 302
События 305
Виджеты в графическом представлении 311
Резюме 313
Глава 22. Анимация 314
Класс QMovie 314
SVG-графика 316
Анимационный движок и машина состояний 317
Смягчающие линии 320
Машина состояний и переходы 324
Резюме 327
Глава 23. Работа с OpenGL 328
Основные положения OpenGL 328
Классы Qt для работы с OpenGL 330
Реализация OpenGL-программы 330
Разворачивание OpenGL-программ во весь экран 333
Графические примитивы OpenGL 334
Трехмерная графика 337
Резюме 341
Глава 24. Вывод на печать 342
Класс QPrinter 342
Резюме 347
Глава 25. Разработка собственных элементов управления 348
Примеры создания виджетов 348
Резюме 353
Глава 26. Элементы со стилем 354
Встроенные стили 356
Создание собственных стилей 360
Метод рисования простых элементов управления 361
Метод рисования элементов управления 361
Метод рисования составных элементов управления 362
Реализация стиля простого элемента управления 362
Использование QStyle для рисования виджетов 366
Использование каскадных стилей документа 366
Основные положения 367
Изменение подэлементов 368
Управление состояниями 369
Пример 370
Резюме 374
Глава 27. Звук 375
Воспроизведение звука 375
Проверка возможности воспроизведения 376
Пример программы, воспроизводящей звук 376
Резюме 379
Глава 28. Мультимедиа 380
Путешествие к истокам Phonon 380
Архитектура Phonon 381
Быстрый старт 384
Создаем простой медиаплеер 386
Резюме 389
Часть V. Создание приложений 391
Глава 29. Сохранение настроек приложения 393
Управление сеансом 400
Резюме 402
Глава 30. Буфер обмена и перетаскивание 403
Буфер обмена 403
Перетаскивание 404
Реализация drag 406
Реализация drop 408
Создание собственных типов перетаскивания 410
Резюме 415
Глава 31. Интернационализация приложения 417
Подготовка приложения к интернационализации 417
Утилита lupdate 419
Программа Qt Linguist 420
Утилита lrelease. Пример программы, использующей перевод 421
Смена перевода в процессе работы программы 423
Завершающие размышления 425
Резюме 426
Глава 32. Создание меню 427
Анатомия меню 427
Отрывные меню 431
Контекстные меню 432
Резюме 433
Глава 33. Диалоговые окна 434
Правила создания диалоговых окон 434
Класс QDialog 435
Модальные диалоговые окна 435
Немодальные диалоговые окна 436
Создание собственного диалогового окна 436
Стандартные диалоговые окна 440
Диалоговое окно выбора файлов 440
Диалоговое окно настройки принтера 442
Диалоговое окно выбора цвета 443
Диалоговое окно выбора шрифта 444
Диалоговое окно ввода 445
Диалоговое окно прогресса 446
Диалоговые окна мастера 447
Диалоговые окна сообщений 448
Окно информационного сообщения 450
Окно предупреждающего сообщения 450
Окно критического сообщения 451
Окно сообщения о программе 452
Окно сообщения About Qt 452
Окно сообщения об ошибке 453
Резюме 453
Глава 34. Предоставление помощи 455
Всплывающая подсказка 455
Подсказка "Что это" 457
Система помощи (Online Help) 458
Резюме 461
Глава 35. Создание SDI- и MDI-приложений 462
Класс главного окна QMainWindow 462
Класс действия QAction 463
Панель инструментов 464
Доки 466
Строка состояния 467
Окно заставки 469
SDI- и MDI-приложения 471
SDI-приложение 471
MDI-приложение 475
Резюме 483
Глава 36. Рабочий стол (Desktop) 484
Область уведомлений 484
Виджет экрана 489
Класс сервиса рабочего стола 493
Резюме 493
Часть VI. Особые возможности Qt 495
Глава 37. Работа с файлами, каталогами и потоками ввода-вывода 497
Ввод-вывод. Класс QIODevice 497
Работа с файлами. Класс QFile 499
Класс QBuffer 500
Класс QTemporaryFile 501
Работа с каталогами. Класс QDir 501
Просмотр содержимого каталога 502
Информация о файлах. Класс QFileInfo 505
Файл или каталог? 505
Путь и имя файла 506
Информация о дате и времени 506
Получение атрибутов файла 506
Определение размера файла 506
Наблюдение за файлами и каталогами 507
Потоки ввода-вывода 509
Класс QTextStream 509
Класс QDataStream 511
Резюме 511
Глава 38. Дата, время и таймер 513
Дата и время 513
Класс даты QDate 513
Класс времени QTime 515
Класс даты и времени QDateTime 516
Таймер 516
Событие таймера 517
Класс QTimer 519
Класс QBasicTimer 521
Резюме 521
Глава 39. Процессы и потоки 522
Процессы 522
Потоки 525
Приоритеты 527
Обмен сообщениями 527
Сигнально-слотовые соединения 528
Отправка событий 532
Синхронизация 535
Мьютексы 536
Семафоры 537
Ожидание условий 538
Возникновение тупиковых ситуаций 538
Фреймворк QtConcurrent 539
Резюме 541
Глава 40. Программирование поддержки сети 542
Сокетное соединение 542
Модель "клиент-сервер" 543
Реализация TCP-сервера 544
Реализация TCP-клиента 549
Реализация UDP-сервера и UDP-клиента 553
Высокоуровневые классы 557
Класс QFtp 557
Класс QHttp 558
Управляющий доступом к сети 559
Блокирующий подход 566
Режим прокси 569
Резюме 569
Глава 41. Работа с XML 571
Основные понятия и структура XML-документа 571
XML и Qt 573
Работа с DOM 573
Чтение XML-документа 574
Создание и запись XML-документа 576
Работа с SAX 578
Чтение XML-документа 578
Класс QXmlStreamReader для чтения XML 581
Использование XQuery 583
Резюме 586
Глава 42. Программирование баз данных 587
Основные положения SQL 587
Создание таблицы 588
Операция вставки 588
Чтение данных 588
Изменение данных 589
Удаление 589
Использование языка SQL в библиотеке Qt 589
Соединение с базой данных (второй уровень) 591
Исполнение команд SQL (второй уровень) 592
Классы SQL-моделей для интервью (третий уровень) 595
Модель запроса 596
Табличная модель 597
Реляционная модель 599
Резюме 600
Глава 43. Динамические библиотеки и система расширений 601
Динамические библиотеки 601
Динамическая загрузка и выгрузка библиотеки 602
Расширения (plug-ins) 605
Расширения для Qt 605
Поддержка собственных расширений в приложениях 607
Создание расширения для приложения 610
Резюме 613
Глава 44. Совместное использование Qt с платформозависимыми API 614
Совместное использование с Windows API 616
Совместное использование с Linux 618
Совместное использование с Mac OS X 618
Системная информация 622
Резюме 623
Глава 45. Qt Designer. Быстрая разработка прототипов 624
Создание новой формы в Qt Designer 624
Добавление виджетов 627
Компоновка (layout) 628
Порядок следования табулятора 629
Сигналы и слоты 630
Использование в формах собственных виджетов 632
Использование форм в проектах 632
Компиляция 634
Динамическая загрузка формы 635
Резюме 637
Глава 46. Проведение тестов 639
Создание тестов 640
Тесты с передачей данных 643
Создание тестов графического интерфейса 645
Параметры для запуска тестов 647
Резюме 647
Глава 47. WebKit 648
Путешествие к истокам 649
А зачем? 650
Быстрый старт 650
Написание простого Web-браузера 652
Ввод адресов 652
Управление историей 652
Загрузка страниц и ресурсов 653
Пишем Web-браузер, попытка номер два 653
Резюме 657
Глава 48. Интегрированная среда разработки Qt Creator 658
Первый запуск 659
Создаем проект "Hello Qt Creator" 659
Пользовательский интерфейс Qt Creator 665
Окна вывода 666
Окно проектного обозревателя 666
Секция компилирования и запуска 666
Редактирование текста 669
Как подсвечен ваш синтаксис? 669
Скрытие и отображение кода 670
Автоматическое дополнение кода 670
Поиск и замена 670
Комбинации клавиш для ускорения работы 675
Вертикальное выделение текста 675
Автоматическое форматирование текста 675
Комментирование блоков 675
Просмотр кода методов класса их определения и атрибутов 676
Помощь, которая всегда рядом 676
Использование стороннего редактора 677
Интерактивный отладчик и программный экзорцизм 677
Синтаксические ошибки 678
Ошибки компоновки 679
Ошибки времени исполнения 680
Логические ошибки 680
Трассировка 680
Команда Step Over 681
Команда Step Into 681
Команда Step Out 682
Контрольные точки 682
Окно переменных (Local and Watches) 683
Окно цепочки вызовов (Call Stack) 684
Резюме 684
Глава 49. Рекомендации по миграции программ из Qt3 в Qt4 686
Основные отличия Qt4 от Qt3 686
Классы графического интерфейса 687
Контейнерные классы 688
Классы программирования сети 689
Классы для программирования баз данных 689
Qt Designer 689
Начало перевода на Qt4 689
Модуль совместимости Qt3Support 690
Завершение перевода на Qt4 691
Резюме 692
Часть VII. Язык сценариев Qt Script 693
Глава 50. Основы поддержки сценариев 695
Принцип взаимодействия с языком сценариев 696
Первый шаг использования сценария 699
Привет, сценарий 700
Резюме 702
Глава 51. Синтаксис языка сценариев 703
Зарезервированные ключевые слова 703
Комментарии 704
Переменные 704
Предопределенные типы данных 705
Целый тип 705
Вещественный тип 705
Строковый тип 706
Логический тип 706
Преобразование типов 706
Константы 708
Операции 708
Операторы присваивания 708
Арифметические операции 708
Поразрядные операции 709
Операции сравнения 710
Приоритет выполнения операций 711
Управляющие структуры 711
Условные операторы 711
Оператор if ... else 713
Оператор switch 713
Оператор условного выражения 714
Циклы 715
Операторы break и continue 715
Цикл for 715
Цикл while 715
Цикл do...while 716
Оператор with 716
Исключительные ситуации 716
Оператор try...catch 716
Оператор throw 717
Функции 717
Встроенные функции 719
Объектная ориентация 719
Статические классы 722
Наследование 722
Перегрузка методов 724
Сказание о "джейсоне" 725
Резюме 726
Глава 52. Встроенные объекты Qt Script 727
Объект Global 727
Объект Number 727
Объект Boolean 727
Объект String 728
Преобразование строки к нижнему и верхнему регистрам 728
Замена 728
Получение символов 728
Получение подстроки 728
Объект RegExp 728
Проверка строки 729
Поиск совпадений 729
Объект Array 729
Дополнение массива элементами 730
Адресация элементов 730
Изменение порядка элементов массива 730
Преобразование массива в строку 731
Объединение массивов 731
Упорядочивание элементов 731
Многомерные массивы 731
Объект Date 732
Объект Маth 733
Модуль числа 733
Округление 734
Определение максимума и минимума 734
Возведение в степень 734
Вычисление квадратного корня 734
Генератор случайных чисел 735
Тригонометрические методы 735
Вычисление натурального логарифма 735
Объект Function 736
Резюме 736
Глава 53. Классы поддержки Qt Script и практические примеры 737
Класс QScriptValue 737
Класс QScriptContext 737
Класс QScriptEngine 738
Практические примеры 740
"Черепашья" графика 741
Сигналы, слоты и функции 748
Отладчик Qt Script 751
Резюме 754
Часть VIII. Технология Qt Quick 755
Глава 54. Знакомство с Qt Quick 757
А зачем? 757
Введение в QML 759
Быстрый старт 759
Резюме 763
Глава 55. Элементы 765
Визуальные элементы 765
Свойства элементов 767
Собственные свойства 769
Создание собственных элементов 771
Использование JavaScript в QML 773
Резюме 774
Глава 56. Управление размещением элементов 775
Фиксаторы 775
Традиционные размещения 782
Резюме 784
Глава 57. Элементы графики 785
Цвета 785
Растровые изображения 786
Элемент Image 786
Элемент BorderImage 789
Градиенты 790
Шрифты 791
Резюме 792
Глава 58. Пользовательский ввод 793
Область мыши 793
Сигналы 796
Ввод с клавиатуры 800
Фокус 801
"Сырой" ввод 803
Резюме 804
Глава 59. Анимация 805
Анимация при изменении свойств 805
Анимация для изменения числовых значений 807
Анимация с изменением цвета 808
Анимация с поворотом 809
Анимации поведения 810
Параллельные и последовательные анимации 812
Состояния и переходы 815
Состояния 815
Переходы 818
Резюме 820
Глава 60. Модель/Представление 822
Модели 822
Модель списка 822
XML-модель 823
Представления данных моделей 825
Элемент Flickable 825
Элемент ListView 826
Элемент GridView 828
Элемент PathView 830
Резюме 833
Глава 61. Qt Quick и C++ 834
Использование языка QML в C++ 834
Использование компонентов языка C++ в QML 835
Резюме 838
Эпилог 839
Приложения 841
Приложение 1. Таблицы семибитной кодировки ASCII 843
Приложение 2. Таблица простых чисел 846
Приложение 3. Глоссарий 849
Приложение 4. Описание архива с примерами 853
Предметный указатель 863