ВВЕДЕНИЕ |
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
Оглавление
|