ВВЕДЕНИЕ |
1 |
|
Foreword |
1 |
|
Предисловие |
2 |
|
От автора ко второму изданию |
2 |
|
Вступление |
4 |
|
Структура книги |
10 |
|
Часть 1. Основы Qt |
10 |
|
Часть 2. Элементы управления |
11 |
|
Часть 3. События и взаимодействие с пользователем |
13 |
|
Часть 4. Графика и звук |
14 |
|
Часть 5. Создание приложений |
16 |
|
Часть 6. Особые возможности Qt |
17 |
|
Часть 7. Язык сценария Qt Script |
19 |
Благодарности
|
20 |
ЧАСТЬ 1. ОСНОВЫ QT |
23 |
ГЛАВА 1. ОБЗОР ИЕРАРХИИ КЛАССОВ QT |
25 |
|
Первая программа на Qt |
25 |
|
Модули Qt |
27 |
|
Пространство имен Qt |
29 |
|
Модуль QtCore |
29 |
|
Модуль QtGui |
30 |
|
Модуль QtNetwork |
32 |
|
Модуль QtXml |
32 |
|
Модуль QtSql |
32 |
|
Модуль QtOpenGL |
32 |
|
Модуль QtSvg |
32 |
|
Модуль Qt3Support |
32 |
Резюме
|
33 |
ГЛАВА 2. ФИЛОСОФИЯ ОБЪЕКТНОЙ МОДЕЛИ |
34 |
|
Механизм сигналов и слотов |
37 |
|
Сигналы |
42 |
|
Слоты |
45 |
|
Соединение объектов |
46 |
|
Разъединение объектов |
52 |
|
Организация объектных иерархий |
52 |
|
Метаобъектная информация |
55 |
Резюме
|
56 |
ГЛАВА 3. РАБОТА С QT |
58 |
|
Установка Qt |
58 |
|
Установка Qt в ОС Windows |
58 |
|
Установка Qt в ОС Linux |
60 |
|
Qt Assistant |
63 |
|
Работа с qmake |
63 |
|
Рекомендации для проекта с Qt |
67 |
|
Метаобъектный компилятор MOC |
68 |
|
Компилятор ресурсов RCC |
69 |
|
Структура Qt-проекта |
70 |
|
Интегрированная среда разработки IDE |
72 |
|
Методы отладки |
73 |
|
Отладчик GDB (GNU Debugger) |
73 |
|
Прочие методы отладки |
77 |
|
Глобальные определения Qt |
79 |
Резюме
|
81 |
ГЛАВА 4. БИБЛИОТЕКА КОНТЕЙНЕРОВ | 82 |
|
Контейнерные классы |
83 |
|
Итераторы |
85 |
|
Итераторы в стиле Java |
86 |
|
Итераторы в стиле STL |
87 |
|
Ключевое слово foreach |
90 |
|
Описание последовательных контейнеров |
90 |
|
Вектор QVector |
91 |
|
Списки QList, QLinkedList |
93 |
|
Стек QStack |
95 |
|
Очередь QQueue |
96 |
|
Описание ассоциативных контейнеров |
97 |
|
Словари QMap, QMultiMap |
98 |
|
Хэши QHash и QMultiHash |
101 |
|
Множество QSet |
102 |
|
Алгоритмы |
105 |
|
Сортировка |
106 |
|
Поиск |
107 |
|
Сравнение |
107 |
|
Заполнение значениями |
108 |
|
Строки |
108 |
|
Регулярные выражения |
110 |
|
Произвольный тип QVariant |
113 |
|
Модель общего использования данных |
114 |
Резюме
|
115 |
ЧАСТЬ 2. ЭЛЕМЕНТЫ УПРАВЛЕНИЯ |
117 |
ГЛАВА 5. С ЧЕГО НАЧИНАЮТСЯ ЭЛЕМЕНТЫ УПРАВЛЕНИЯ |
119 |
|
Класс QWidget |
119 |
|
Размеры и координаты виджета |
123 |
|
Механизм закулисного хранения (Backing Store) |
124 |
|
Установка фона виджета |
124 |
|
Изменение указателя мыши |
126 |
|
Стек виджетов |
130 |
|
Рамки |
130 |
|
Виджет видовой прокрутки |
132 |
Резюме
|
134 |
ГЛАВА 6. УПРАВЛЕНИЕ АВТОМАТИЧЕСКИМ РАЗМЕЩЕНИЕМ ЭЛЕМЕНТОВ |
136 |
|
Лейаут-менеджеры (Layout managers) |
137 |
|
Горизонтальное и вертикальное размещения |
138 |
|
Вложенные размещения |
144 |
|
Табличное размещение QGridLayout |
146 |
|
Порядок следования табулятора |
154 |
|
Разделители QSplitter |
155 |
Резюме
|
157 |
ГЛАВА 7. ЭЛЕМЕНТЫ ОТОБРАЖЕНИЯ |
158 |
|
Надписи |
158 |
|
Индикатор прогресса |
164 |
|
Электронный индикатор |
168 |
Резюме
|
171 |
ГЛАВА 8. КНОПКИ |
172 |
|
С чего начинаются кнопки. Класс QAbstractButton |
172 |
|
Установка текста |
172 |
|
Установка изображения |
173 |
|
Взаимодействие с пользователем |
173 |
|
Опрос состояния |
173 |
|
Кнопка нажатия |
174 |
|
Флажки |
178 |
|
Переключатели |
179 |
|
Группировка кнопок |
181 |
Резюме
|
186 |
ГЛАВА 9. ЭЛЕМЕНТЫ НАСТРОЙКИ |
187 |
|
Класс QAbstractSlider |
187 |
|
Изменение положения |
187 |
|
Установка диапазона |
188 |
|
Установка шага |
188 |
|
Установка и получение значений |
188 |
|
Ползунок |
189 |
|
Полоса прокрутки |
191 |
|
Установщик |
194 |
Резюме
|
196 |
ГЛАВА 10. ЭЛЕМЕНТЫ ВВОДА |
197 |
|
Однострочное текстовое поле |
197 |
|
Редактор текста |
200 |
|
Расцветка синтаксиса (Syntax Highlighting) |
204 |
|
С чего начинаются виджеты счетчиков |
205 |
|
Счетчик |
205 |
|
Элемент ввода даты и времени |
207 |
|
Проверка ввода |
208 |
Резюме
|
210 |
ГЛАВА 11. ЭЛЕМЕНТЫ ВЫБОРА |
211 |
|
Простой список |
211 |
|
Вставка элементов |
212 |
|
Сортировка элементов |
213 |
|
Выбор элементов пользователем |
214 |
|
Изменение элементов пользователем |
214 |
|
Режим пиктограмм |
214 |
|
Иерархические списки |
216 |
|
Таблицы |
220 |
|
Выпадающий список |
222 |
|
Закладки |
224 |
|
Виджет панели инструментов |
225 |
Резюме
|
227 |
ГЛАВА 12. ИНТЕРВЬЮ ИЛИ МОДЕЛЬ-ПРЕДСТАВЛЕНИЕ |
228 |
|
Концепт |
229 |
|
Модель |
230 |
|
Представление |
232 |
|
Выделение элемента |
234 |
|
Делегат |
236 |
|
Индексы модели |
239 |
|
Иерархические данные |
240 |
|
Роли элементов |
245 |
|
Создание собственных моделей данных |
247 |
|
Промежуточная модель данных (Proxy Model) |
256 |
|
Модель элементно-базированных классов |
259 |
Резюме
|
262 |
ГЛАВА 13. ЦВЕТОВАЯ ПАЛИТРА ЭЛЕМЕНТОВ УПРАВЛЕНИЯ |
264 |
Резюме
|
269 |
ЧАСТЬ 3. СОБЫТИЯ И ВЗАИМОДЕЙСТВИЕ С ПОЛЬЗОВАТЕЛЕМ |
271 |
ГЛАВА 14. СОБЫТИЯ |
273 |
|
Перезапись специализированных методов обработки событий |
276 |
|
События клавиатуры |
276 |
|
Событие обновления контекста рисования. Класс QPaintEvent |
280 |
|
События мыши |
281 |
|
Событие таймера. Класс QTimerEvent |
287 |
|
События перетаскивания (drag&drop) |
288 |
|
Остальные классы событий |
289 |
|
Реализация собственных классов событий |
292 |
|
Методы enterEvent() и leaveEvent() |
292 |
|
Перезапись метода event() |
293 |
|
Сохранение работоспособности приложения |
297 |
Резюме
|
298 |
ГЛАВА 15. ФИЛЬТРЫ СОБЫТИЙ |
299 |
Резюме
|
303 |
ГЛАВА 16. ИСКУССТВЕННОЕ СОЗДАНИЕ СОБЫТИЙ |
304 |
Резюме
|
308 |
ЧАСТЬ 4. ГРАФИКА И ЗВУК |
309 |
ГЛАВА 17. ВВЕДЕНИЕ В КОМПЬЮТЕРНУЮ ГРАФИКУ |
311 |
|
Классы геометрии |
311 |
|
Точка |
311 |
|
Двумерный размер |
313 |
|
Прямоугольник |
314 |
|
Прямая линия |
315 |
|
Полигон |
316 |
|
Цвет |
317 |
|
Класс QСolor |
317 |
|
Цветовая модель RGB |
317 |
|
Цветовая модель HSV |
320 |
|
Цветовая модель CMYK |
321 |
|
Палитра |
323 |
|
Предопределенные цвета |
323 |
Резюме
|
325 |
ГЛАВА 18. ЛЕГЕНДА О КОРОЛЕ АРТУРЕ И КОНТЕКСТЕ РИСОВАНИЯ |
326 |
|
Класс QPainter |
328 |
|
Перья и кисти |
330 |
|
Градиенты |
333 |
|
Техника сглаживания (Anti-Aliasing) |
336 |
|
Рисование |
336 |
|
Запись команд рисования |
344 |
|
Трансформация систем координат |
345 |
|
Графическая траектория (painter path) |
349 |
|
Отсечения |
350 |
|
Режим совмещения (composition mode) |
352 |
Резюме
|
356 |
ГЛАВА 19. РАСТРОВЫЕ ИЗОБРАЖЕНИЯ |
357 |
|
Форматы графических файлов |
357 |
|
Формат BMP |
357 |
|
Формат GIF |
358 |
|
Формат PNG |
358 |
|
Формат JPEG |
358 |
|
Формат XPM |
359 |
|
Контекстно-независимое представление |
360 |
|
Класс QImage |
360 |
|
Класс QImage как контекст рисования |
368 |
|
Контекстно-зависимое представление |
370 |
|
Класс QPixmap |
370 |
|
Класс QPixmapCache |
372 |
|
Класс QBitmap |
372 |
|
Использованием масок для QPixmap |
373 |
|
Создание нестандартного окна виджета |
374 |
Резюме
|
377 |
ГЛАВА 20. РАБОТА СО ШРИФТАМИ |
378 |
|
Отображение строки |
380 |
Резюме
|
383 |
ГЛАВА 21. ГРАФИЧЕСКОЕ ПРЕДСТАВЛЕНИЕ |
385 |
|
Сцена |
386 |
|
Представление |
387 |
|
Элемент |
387 |
|
События |
391 |
Резюме
|
399 |
ГЛАВА 22. АНИМАЦИЯ |
400 |
Резюме
|
402 |
ГЛАВА 23. РАБОТА С OPENGL |
403 |
|
Основные положения OpenGL |
404 |
|
Классы Qt для работы с OpenGL |
405 |
|
Реализация OpenGL-программы |
406 |
|
Разворачивание OpenGL-программ во весь экран |
411 |
|
Графические примитивы OpenGL |
411 |
|
Трехмерная графика |
416 |
Резюме
|
422 |
ГЛАВА 24. ВЫВОД НА ПЕЧАТЬ |
423 |
Резюме
|
430 |
ГЛАВА 25. РАЗРАБОТКА СОБСТВЕННЫХ ЭЛЕМЕНТОВ УПРАВЛЕНИЯ |
431 |
Резюме
|
438 |
ГЛАВА 26. ЭЛЕМЕНТЫ СО СТИЛЕМ |
439 |
|
Встроенные стили |
441 |
|
Создание собственных стилей |
447 |
|
Метод рисования простых элементов управления |
449 |
|
Метод рисования элементов управления |
449 |
|
Метод рисования составных элементов управления |
450 |
|
Реализация стиля простого элемента управления |
450 |
|
Использование QStyle для рисования виджетов |
455 |
|
Использование каскадного стиля документа |
456 |
Резюме
|
460 |
ГЛАВА 27. ЗВУК |
461 |
|
Воспроизведение звука |
461 |
|
Проверка возможности воспроизведения |
462 |
|
Пример программы, воспроизводящей звук |
463 |
|
Резюме |
467 |
ЧАСТЬ 5. СОЗДАНИЕ ПРИЛОЖЕНИЙ
|
469 |
ГЛАВА 28. СОХРАНЕНИЕ НАСТРОЕК ПРИЛОЖЕНИЯ |
471 |
|
Управление сеансом |
480 |
Резюме
|
482 |
ГЛАВА 29. БУФЕР ОБМЕНА И ПЕРЕТАСКИВАНИЕ |
483 |
|
Буфер обмена |
483 |
|
Перетаскивание |
484 |
|
Реализация Drag |
485 |
|
Реализация Drop |
488 |
|
Создание собственных типов перетаскивания |
491 |
Резюме
|
492 |
ГЛАВА 30. ИНТЕРНАЦИОНАЛИЗАЦИЯ ПРИЛОЖЕНИЯ |
494 |
|
Подготовка приложения к интернационализации |
495 |
|
Утилита LUPDATE |
495 |
|
Программа Qt Linguist |
497 |
|
Утилита LRELEASE. Пример программы использующей перевод |
498 |
Резюме
|
500 |
ГЛАВА 31. СОЗДАНИЕ МЕНЮ |
502 |
|
Анатомия меню |
503 |
|
Отрывные меню |
507 |
|
Контекстные меню |
508 |
Резюме
|
511 |
ГЛАВА 32. ДИАЛОГОВЫЕ ОКНА |
512 |
|
Правила создания диалоговых окон |
512 |
|
Класс QDialog |
514 |
|
Модальные диалоговые окна |
514 |
|
Немодальные диалоговые окна |
515 |
|
Создание собственного диалогового окна |
515 |
|
Стандартные диалоговые окна |
520 |
|
Диалоговое окно выбора файлов |
520 |
|
Диалоговое окно настройки принтера |
523 |
|
Диалоговое окно выбора цвета |
524 |
|
Диалоговое окно выбора шрифта |
525 |
|
Диалоговое окно ввода |
526 |
|
Диалоговое окно прогресса |
527 |
|
Окна сообщений |
529 |
|
Окно информационного сообщения |
532 |
|
Окно предупреждающего сообщения |
532 |
|
Окно критического сообщения |
534 |
|
Окно сообщения About |
534 |
|
Окно сообщения About Qt |
535 |
|
Окно сообщения об ошибке |
535 |
Резюме
|
537 |
ГЛАВА 33. ПРЕДОСТАВЛЕНИЕ ПОМОЩИ |
538 |
|
Воздушная подсказка |
538 |
|
Подсказка "Что это" |
539 |
|
Система помощи (Online Help) |
541 |
Резюме
|
544 |
ГЛАВА 34. ПАНЕЛЬ ИНСТРУМЕНТОВ И СТРОКА СОСТОЯНИЯ |
546 |
|
Панель инструментов |
546 |
|
Строка состояния |
549 |
Резюме
|
552 |
ГЛАВА 35. СОЗДАНИЕ ПРИЛОЖЕНИЙ |
553 |
|
Класс главного окна QMainWindow |
553 |
|
Предшествующее окно |
555 |
|
Класс действия QAction |
557 |
|
Создание SDI- и MDI-приложений |
559 |
|
SDI-приложение |
559 |
|
MDI-приложение |
566 |
|
Резюме |
575 |
ЧАСТЬ 6. ОСОБЫЕ ВОЗМОЖНОСТИ QT
|
577 |
ГЛАВА 36. РАБОТА С ФАЙЛАМИ, ДИРЕКТОРИЯМИ И ПОТОКАМИ
ВВОДА/ВЫВОДА |
579 |
|
Ввод/вывод. Класс QIODevice |
579 |
|
Работа с файлами. Класс QFile |
582 |
|
Класс QBuffer |
584 |
|
Класс QTemporaryFile |
585 |
|
Работа с директориями. Класс QDir |
585 |
|
Просмотр содержимого директории |
586 |
|
Информация о файлах. Класс QFileInfo |
590 |
|
Файл или каталог? |
590 |
|
Путь и имя файла |
591 |
|
Информация о дате и времени |
591 |
|
Получение атрибутов файла |
591 |
|
Определение размера файла |
592 |
|
Потоки ввода/вывода |
592 |
|
Класс QTextStream |
593 |
|
Класс QDataStream |
594 |
Резюме
|
595 |
ГЛАВА 37. ДАТА, ВРЕМЯ И ТАЙМЕР |
597 |
|
Дата и время |
597 |
|
Класс даты QDate |
597 |
|
Класс времени QTime |
599 |
|
Класс даты и времени QDateTime |
601 |
|
Таймер |
601 |
|
Событие таймера |
603 |
|
Класс QTimer |
605 |
|
Класс QBasicTimer |
608 |
Резюме
|
608 |
ГЛАВА 38. ПРОЦЕССЫ И ПОТОКИ |
609 |
|
Процессы |
609 |
|
Потоки |
613 |
|
Приоритеты |
615 |
|
Обмен сообщениями |
616 |
|
Синхронизация |
628 |
Резюме
|
632 |
ГЛАВА 39. ПРОГРАММИРОВАНИЕ ПОДДЕРЖКИ СЕТИ |
634 |
|
Сокетное соединение |
634 |
|
Модель "клиент-сервер" |
635 |
|
Реализация сервера |
636 |
|
Реализация клиента |
643 |
|
Высокоуровневые классы |
650 |
|
Класс QFtp |
650 |
|
Класс QHttp |
651 |
Резюме
|
652 |
ГЛАВА 40. РАБОТА С XML |
653 |
|
Основные понятия и структура XML-документа |
654 |
|
XML и Qt |
655 |
|
Работа с DOM |
656 |
|
Работа с SAX |
663 |
|
Чтение XML-документа |
663 |
Резюме
|
667 |
ГЛАВА 41. ПРОГРАММИРОВАНИЕ БАЗ ДАННЫХ |
668 |
|
Основные положения SQL |
669 |
|
Создание таблицы |
669 |
|
Операция вставки |
669 |
|
Чтение данных |
670 |
|
Изменение данных |
670 |
|
Удаление |
671 |
|
Использование SQL в библиотеке Qt |
671 |
|
Соединение с базой данных (второй уровень) |
673 |
|
Исполнение команд SQL (второй уровень) |
674 |
|
Классы SQL-моделей для Интервью (третий уровень) |
678 |
Резюме
|
681 |
ГЛАВА 42. ДИНАМИЧЕСКИЕ БИБЛИОТЕКИ И СИСТЕМА РАСШИРЕНИЙ |
682 |
|
Динамические библиотеки |
682 |
|
Создание динамической библиотеки |
683 |
|
Использование динамических библиотек |
684 |
|
Расширения (plug-ins) |
686 |
|
Расширение для Qt |
686 |
|
Поддержка собственных расширений в приложениях |
688 |
Резюме
|
697 |
ГЛАВА 43. СОВМЕСТНОЕ ИСПОЛЬЗОВАНИЕ QT
С ПЛАТФОРМОЗАВИСИМЫМИ API |
699 |
|
Совместное использование с Windows API |
700 |
|
Совместное использование с Linux |
703 |
Резюме
|
703 |
ГЛАВА 44. QT DESIGNER. БЫСТРАЯ РАЗРАБОТКА ПРОТОТИПОВ |
704 |
|
Создание новой формы в Qt Designer |
704 |
|
Добавление виджетов |
708 |
|
Размещения (Layouts) |
710 |
|
Порядок следования табулятора |
712 |
|
Сигналы и слоты |
712 |
|
Использование форм в проектах |
715 |
|
Компиляция |
717 |
Резюме
|
719 |
ГЛАВА 45. ПРОВЕДЕНИЕ ТЕСТОВ |
720 |
|
Создание тестов |
721 |
|
Тесты с передачей данных |
725 |
|
Создание тестов графического интерфейса |
728 |
|
Параметры для запуска тестов |
730 |
Резюме
|
731 |
ГЛАВА 46. РЕКОМЕНДАЦИИ ПО МИГРАЦИИ ПРОГРАММ ИЗ QT3 В QT4 |
732 |
|
Основные отличия Qt4 от Qt3 |
733 |
|
Классы графического интерфейса |
734 |
|
Контейнерные классы |
735 |
|
Классы программирования сети |
736 |
|
Классы для программирования баз данных |
736 |
|
Qt Designer |
737 |
|
Начало перевода на Qt4 |
737 |
|
Модуль совместимости Qt3Support |
737 |
|
Завершение перевода на Qt4 |
739 |
|
Резюме |
740 |
ЧАСТЬ 7. ЯЗЫК СЦЕНАРИЕВ QT SCRIPT
|
741 |
ГЛАВА 47. ОСНОВЫ |
743 |
|
Принцип взаимодействия с языком сценариев |
744 |
|
Привет, сценарий! |
749 |
Резюме
|
751 |
ГЛАВА 48. СИНТАКСИС ЯЗЫКА СЦЕНАРИЕВ |
752 |
|
Комментарии |
753 |
|
Переменные |
753 |
|
Предопределенные типы данных |
754 |
|
Преобразование типов |
756 |
|
Константы |
758 |
|
Операции |
758 |
|
Операторы присваивания |
758 |
|
Арифметические операции |
759 |
|
Поразрядные операции |
760 |
|
Операции сравнения |
761 |
|
Приоритеты выполнения операции |
762 |
|
Управляющие структуры |
763 |
|
Условные операторы |
763 |
|
Оператор условного выражения |
765 |
|
Циклы |
766 |
|
Оператор with |
768 |
|
Исключительные ситуации |
768 |
|
Функции |
770 |
|
Встроенные функции |
771 |
|
Объектная ориентация |
772 |
Резюме
|
773 |
ГЛАВА 49. ВСТРОЕННЫЕ ОБЪЕКТЫ QT SCRIPT |
774 |
|
Объект Global |
774 |
|
Объект Number |
774 |
|
Объект Boolean |
775 |
|
Объект String |
775 |
|
Объект RegExp |
776 |
|
Объект Array |
777 |
|
Объект Date |
779 |
|
Объект Маth |
779 |
|
Объект Function |
783 |
Резюме
|
783 |
ГЛАВА 50. КЛАССЫ ПОДДЕРЖКИ QT SCRIPT И ПРАКТИЧЕСКИЕ ПРИМЕРЫ |
784 |
|
Класс QScriptValue |
784 |
|
Класс QScriptContext |
785 |
|
Класс QScriptEngine |
785 |
|
Практические примеры |
787 |
|
"Черепашья" графика |
787 |
|
Сигналы, слоты и функции |
797 |
|
Резюме |
803 |
|
ЭПИЛОГ |
804 |
|
ПРИЛОЖЕНИЯ |
805 |
|
ПРИЛОЖЕНИЕ 1. ТАБЛИЦЫ 7-БИТНОЙ ASCII-КОДИРОВКИ |
807 |
|
ПРИЛОЖЕНИЕ 2. ТАБЛИЦА ПРОСТЫХ ЧИСЕЛ |
811 |
|
ПРИЛОЖЕНИЕ 3. ГЛОССАРИЙ |
815 |
|
ПРИЛОЖЕНИЕ 4. ОПИСАНИЕ КОМПАКТ-ДИСКА |
820 |
|
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ |
831 |
|
XVIII
Оглавление
XIX
Оглавление
|