Книга Qt4.7+. Практическое программирование на C++. Боровский посвящена создании приложений для Windows и Линукс с использованием библиотеки Qt версий 4.7.x и 4.8. Детально рассмотрено программирование интерактивной и трехмерной графики, баз данных, многопоточных приложений, создание своих виджетов, описание принципов работы с XML, и применение новейших подсистем Qt Declarative и Qt3/D. Дано описание классов Qt применительно к решению определенных задач. Существенное внимание уделено основным принципам разработки сложных приложений. Рассмотрено использование разных профессиональных инструментов разработчика при работе с библиотекой Qt. На авторской странице помощи книжки расположены исходные тексты демонстрационных примеров (более 40).
Оглавление книги
Qt4.7+. Практическое программирование на C++. Боровский
Оглавление Введение 7
Что такое Qt? 7
Что вы найдете в этой книге? 8
Для кого предназначена эта книга? 10
Часть I. Начальный этап разработки проектов
11
Глава 1. Краткое введение в Qt 4
13
Средства разработки для библиотеки Qt library 13
Qt SDK 14
Qt для Microsoft Visual Studio 15
Qt Framework 16
Qt и Eclipse 17
Qt и CMake 18
Общая структура приложений Qt 20
Инструменты Qt 21
Утилита qmake 22
Инструменты интернационализации и локализации 24
Разделение контекстов 29
Склонение существительных, следующих после числительных 29
Qt Designer 31
Компоновка виджетов 31
Визуальное программирование 36
Другие возможности Qt Designer 49
Редактирование партнеров 54
Редактирование порядка перехода между виджетами 54
Qt Designer и таблицы стилей 55
Контейнеры Qt library 57
Сборка приложения Qt 4 под управлением CMake 57
Глава 2. Взаимодействие объектов Qt между собой
60
События Qt 60
Обработка событий, более подробное обсуждение 69
События Qt и многопоточность 72
Удаление объекта после выхода из его метода 73
Фильтрация событий 73
Сигналы и слоты Qt library 75
Исследование сигналов и слотов различных типов 77
Полезные трюки при работе с сигналами и слотами 81
Класс QSignalMapper и программа-калькулятор 81
Глава 3. Работа над серьезными проектами
86
Правило модульности 86
Правило разделения движка и интерфейса 87
Правило разделения движка и политики 88
Правило "ноль-один-бесконечность" 88
Простота переноса на другие платформы 89
Интроспекция 91
Повторное использование кода 96
Применение принципа модульности в Qt 96
Принцип модульности и простое приложение баз данных 98
Интеллектуальные указатели 105
Интеллектуальные указатели – "за и против" 108
Паттерны и анти-паттерны 109
Модульное тестирование 114
Qt и модульное тестирование 116
Глава 4. Инструментарий профессионального разработчика
125
Отладчик GDB 125
Точки останова 129
Обзор данных 130
Стек вызовов 132
Статический анализ кода C++ 132
Инструменты рефакторинга 134
Рефакторинг в Microsoft Visual Studio 135
Рефакторинг в среде Eclipse 138
Рефакторинг "вручную" 140
Рефакторинг и производительность 142
Системы контроля версий 143
Какую систему контроля версий выбрать? 144
Subversion 145
Структура директорий проекта Subversion 146
Создание резервной копии репозитория 148
Клиенты Subversion 148
Программа svn 148
Qt Creator и Subversion 150
Eclipse и Subversion 153
Microsoft Visual Studio и Subversion 156
TortoiseSVN 159
Часть II. Развиваем проекты
165
Глава 5. Qt и многопоточность
167
Основы теории многопоточности 172
Критические области 173
Реентерабельность 173
Потоковая безопасность 174
Потоки без цикла обработки событий 175
Атомарные операции и порядок доступа к памяти 183
Пример с использованием класса ExtThread 183
Локальная память потоков 187
Передача данных межу потоками 188
Класс QSharedMemory 189
Мьютексы и семафоры 189
Кольцевой буфер без блокировок 193
Очередь без блокировок 205
Глава 6. Высокоуровневый интерфейс потоков
218
Классы QRunnable и QThreadPool 218
Что выбрать: QRunnable или ExtThread? 220
Программа поиска файлов по содержимому 221
Быстрый доступ к содержимому файла 225
Быстрый поиск строк 229
Функция QtConcurrent::run() 232
Глава 7. Возвращаемся к Interview Framework
235
Класс QSqlDatabase 235
Схема работы Interview Framework 238
Утилита sqlite3 241
Отношения, допускающие значение NULL 242
Класс WeakRelationalTable 243
Класс WeakRelation 249
Класс WeakRelationalDelegate 250
Творческое использование делегатов 256
Создание стиля заголовков таблиц 261
Класс QDataWidgetMapper 262
Классы QDataWidgetMapper и QComboBox 269
Глава 8. Библиотека Qt и ваша видеокарта
271
Графическая система Arthur 271
Класс QGLContext 276
Шейдеры OpenGL в Qt 280
Взгляд в будущее 286
Подсистема Qt/3D 286
Поддержка OpenCL в Qt 4.8 292
Глава 9. Растровая графика и текст
298
Вывод на экран больших изображений 298
Классы QImage, QPicture и QPixmap 299
Виджет для вывода больших изображений 299
Текст с элементами форматирования 316
Классы QTextDocument и QTextEdit 316
Установка aspell под Windows 318
Подготовка программы 319
Сохранение документа QTextDocument в различных форматах 328
Добавление изображений в документ QTextDocument 329
Новшества в QTextDocument и сопутствующих классах 332
Класс QTextLayout 332
Класс QStaticText 335
Глава 10. Система Graphics View Framework
340
Знакомство с системой 342
Пишем свою игру 344
Формат файла данных 344
Переходим к графике 353
Встраивание виджетов 360
Использование встроенных виджетов в качестве элементов управления 362
Виджет для выбора фрагментов изображений 371
Graphics View Framework и OpenGL 386
Виджет в стиле браузера Opera 388
Создаем графический виджет 395
Часть III. Дополнительный материал
401
Глава 11. Конечные автоматы и анимация
403
Конечные автоматы и минимизация повторяющегося кода 408
Конечные автоматы и анимация 414
Глава 12. Сценарии для программ Qt
418
Передача ссылок на объекты Qt в сценарии 420
Обработка сигналов в сценарии 426
Использование функций приложения в сценарии 428
Создание объектов в сценарии 429
Создание новых типов данных в сценарии 430
Новшества в системе сценариев Qt 4.7 436
Глава 13. Динамические расширения программ Qt
437
Класс QLibrary 449
Глава 14. Консольные приложения Qt
450
Обработка событий в консольной программе 450
Ввод и вывод данных на консоль 451
Службы и демоны 457
Глава 15. Язык QML
461
Виджет QML в программе Qt 469
Самостоятельная программа на языке QML 475
Изменения и дополнения 477
Программа clocks 478
Утилита qmlviewer 481
Заключение 483
Список литературы 484
Предметный указатель