
Представляем новинку: книгу Владимира Дронова и Николая Прохоренка “Python 3 и PyQt 6. Разработка приложений“.
В книге Описан язык Python 3: типы данных, операторы, условия ветвления и выбора, циклы, регулярные выражения, функции, классы, работа с файлами и каталогами, взаимодействие с механизмами Windows, часто используемые модули стандартной библиотеки. Особое внимание уделено библиотеке PyQt, позволяющей создавать приложения с графическим интерфейсом. Описаны средства для создания и вывода окон, основных компонентов (кнопок, полей, полей, списков, таблиц, меню, панелей инструментов и др.). Рассмотрена обработка событий и сигналов, разработка многопоточных программ, работа с базами данных, вывод графики, воспроизведение мультимедиа, запись аудио, видео и фото, печать документов, экспорт их в формат Adobe PDF и сохранения настроек программ. Дан пример полнофункционального приложения для создания и решения головоломок судоку. На сайте издательства размещен электронный архив со всеми примерами из книги.
Вы изучите:
- Типы данных Python
- Объектно-ориентированное программирование
- Работа с файлами и каталогами
- Взаимодействие с Windows
- Создание оконных программ
- Работа с базами данных
- Мультимедиа
- Запись звука, видео и фото
- Печать и экспорт в формат PDF
- Работающий пример: приложение «Судоку»
Дронов Владимир Александрович, профессиональный программист, писатель и журналист, работает с компьютерами с 1987 года. Автор более 30 популярных компьютерных книг, в том числе «Django 2.1. Практика создания веб-сайтов на Python», “HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера“, «Python 3. Самое необходимое», «Python 3 и PyQt 5. Разработка приложений», “Laravel. Быстрая разработка современных динамических Web-сайтов на PHP, MySQL, HTML и CSS“, “Angular 4. Быстрая разработка сверхдинамических Web-сайтов на TypeScript и PHP” и книг по продуктам Adobe Flash и Adobe Dreamweaver различных версий. Его статьи публикуются в журналах “Мир ПК” и “ИнтерФейс” (Израиль) и интернет-порталах “IZ City” и “TheVista.ru”.
Прохоренок Николай Анатольевич, профессиональный программист, имеющий большой практический опыт создания и продвижения сайтов, анализа и обработки данных (работает с компьютерами с 1990 года). Автор книг «HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера», «Python 3. Самое необходимое», «Python 3 и PyQt 5. Разработка приложений», «Основы Java», «OpenCV и Java. Обработка изображений и компьютерное зрение», «Язык C. Самое необходимое» и др., многие из которых выдержали несколько переизданий и стали бестселлерами.
-
Python 3 и PyQt 6. Разработка приложений
1688 ₽
1435 ₽
Предисловие…………………………………………………………………………………………… 15
Python………………………………………………………………………………………………………………………………………….. 15
PyQt……………………………………………………………………………………………………………………………………………… 16
Использованное ПО…………………………………………………………………………………………………………………… 16
Типографские соглашения………………………………………………………………………………………………………… 16
Часть I. Основы языка Python………………………………………………….. 19
Глава 1. Первые шаги……………………………………………………………………………. 21
1.1. Установка Python………………………………………………………………………………………………………………… 21
1.2. Интерактивный режим Python. Утилита IDLE…………………………………………………………………. 24
1.3. Введение в Python-программирование……………………………………………………………………………… 25
1.4. Принципы написания Python-программ……………………………………………………………………………. 27
1.4.1. Комментарии и строки документирования…………………………………………………………….. 30
1.4.2. Кодировки, поддерживаемые Python………………………………………………………………………. 31
1.4.3. Подготовка Python-программ для выполнения в UNIX…………………………………………. 31
1.5. Дополнительные возможности IDLE………………………………………………………………………………… 32
1.6. Вывод данных……………………………………………………………………………………………………………………… 33
1.7. Ввод данных………………………………………………………………………………………………………………………… 35
1.8. Утилита pip: установка дополнительных библиотек……………………………………………………… 37
1.9. Доступ к документации………………………………………………………………………………………………………. 42
1.10. Компиляция Python-файлов……………………………………………………………………………………………… 44
Глава 2. Переменные и типы данных…………………………………………………….. 46
2.1. Переменные…………………………………………………………………………………………………………………………. 46
2.2. Типы данных. Понятие объекта и ссылки…………………………………………………………………………. 47
2.3. Присваивание значений переменным……………………………………………………………………………….. 50
2.4. Проверка типа данных……………………………………………………………………………………………………….. 52
2.5. Преобразование типов данных………………………………………………………………………………………….. 53
2.6. Удаление переменных………………………………………………………………………………………………………… 56
Глава 3. Операторы……………………………………………………………………………….. 57
3.1. Математические операторы………………………………………………………………………………………………. 57
3.2. Двоичные операторы………………………………………………………………………………………………………….. 59
3.3. Операторы для работы с последовательностями……………………………………………………………. 60
3.4. Операторы присваивания…………………………………………………………………………………………………… 61
3.5. Пустой оператор…………………………………………………………………………………………………………………. 63
3.6. Приоритет операторов……………………………………………………………………………………………………….. 63
Глава 4. Инструкции ветвления, выбора и циклы…………………………………. 65
4.1. Операторы сравнения…………………………………………………………………………………………………………. 66
4.2. Инструкция ветвления………………………………………………………………………………………………………… 68
4.3. Инструкция выбора…………………………………………………………………………………………………………….. 71
4.4. Цикл перебора последовательности…………………………………………………………………………………. 77
4.5. Цикл с условием………………………………………………………………………………………………………………….. 78
4.6. Оператор continue: переход на следующую итерацию цикла……………………………………….. 79
4.7. Оператор break: прерывание цикла………………………………………………………………………………….. 79
4.8. Оператор присваивания в составе инструкции………………………………………………………………… 80
Глава 5. Числа……………………………………………………………………………………….. 82
5.1. Запись чисел………………………………………………………………………………………………………………………… 82
5.2. Обработка чисел…………………………………………………………………………………………………………………. 84
5.3. Математические функции………………………………………………………………………………………………….. 87
5.4. Генерирование случайных чисел……………………………………………………………………………………… 89
Глава 6. Строки и двоичные данные……………………………………………………… 92
6.1. Создание строк……………………………………………………………………………………………………………………. 92
6.1.1. Специальные символы……………………………………………………………………………………………… 94
6.1.2. Необрабатываемые строки……………………………………………………………………………………… 95
6.2. Операции над строками……………………………………………………………………………………………………… 96
6.3. Форматирование строк………………………………………………………………………………………………………. 98
6.4. Метод format()…………………………………………………………………………………………………………………… 104
6.4.1. Форматируемые строки………………………………………………………………………………………….. 108
6.5. Функции и методы для работы со строками…………………………………………………………………… 109
6.6. Настройка локали…………………………………………………………………………………………………………….. 112
6.7. Изменение регистра символов…………………………………………………………………………………………. 113
6.8. Функции для работы с символами…………………………………………………………………………………… 114
6.9. Поиск и замена в строке……………………………………………………………………………………………………. 114
6.10. Проверка содержимого строки………………………………………………………………………………………. 118
6.11. Двоичные данные типа bytes…………………………………………………………………………………………. 121
6.12. Двоичные данные типа bytearray………………………………………………………………………………….. 125
6.13. Сериализация и десериализация значений………………………………………………………………….. 128
6.14. Хеширование значений………………………………………………………………………………………………….. 129
Глава 7. Регулярные выражения………………………………………………………….. 131
7.1. Синтаксис регулярных выражений…………………………………………………………………………………. 131
7.2. Поиск первого совпадения с шаблоном………………………………………………………………………….. 140
7.3. Поиск всех совпадений с шаблоном……………………………………………………………………………….. 145
7.4. Замена в строке…………………………………………………………………………………………………………………. 146
7.5. Прочие функции и методы……………………………………………………………………………………………….. 148
Глава 8. Списки, кортежи, множества и диапазоны…………………………….. 150
8.1. Создание списков……………………………………………………………………………………………………………… 150
8.2. Операции над списками……………………………………………………………………………………………………. 152
8.3. Многомерные списки………………………………………………………………………………………………………… 155
8.4. Перебор списков……………………………………………………………………………………………………………….. 155
8.5. Генераторы списков и выражения-генераторы……………………………………………………………… 156
8.6. Функции map(), zip(), filter() и reduce()…………………………………………………………………………….. 158
8.7. Добавление и удаление элементов списка……………………………………………………………………… 161
8.8. Поиск элемента в списке и получение сведений об элементах списка………………………… 163
8.9. Переворачивание и перемешивание списка…………………………………………………………………… 164
8.10. Выбор элементов списка случайным образом…………………………………………………………….. 165
8.11. Сортировка списка…………………………………………………………………………………………………………. 166
8.12. Заполнение списка числами………………………………………………………………………………………….. 168
8.13. Преобразование списка в строку…………………………………………………………………………………… 168
8.14. Кортежи…………………………………………………………………………………………………………………………… 169
8.15. Множества, изменяемые и неизменяемые…………………………………………………………………….. 170
8.16. Диапазоны……………………………………………………………………………………………………………………….. 175
8.17. Модуль itertools………………………………………………………………………………………………………………. 177
8.17.1. Генерирование неопределенного количества значений…………………………………. 177
8.17.2. Генерирование комбинаций значений……………………………………………………………… 178
8.17.3. Фильтрация элементов последовательности…………………………………………………… 180
8.17.4. Прочие функции………………………………………………………………………………………………….. 181
Глава 9. Словари………………………………………………………………………………….. 185
9.1. Создание словаря……………………………………………………………………………………………………………… 185
9.2. Операции над словарями…………………………………………………………………………………………………. 187
9.3. Перебор элементов словаря…………………………………………………………………………………………….. 189
9.4. Методы и функции для работы со словарями………………………………………………………………… 190
9.5. Генераторы словарей……………………………………………………………………………………………………….. 193
Глава 10. Работа с датой и временем……………………………………………………. 194
10.1. Получение текущих даты и времени…………………………………………………………………………….. 194
10.2. Форматирование даты и времени………………………………………………………………………………….. 196
10.3. Приостановка выполнения программы………………………………………………………………………… 198
10.4. Значения даты и времени……………………………………………………………………………………………….. 198
10.4.1. Временне промежутки……………………………………………………………………………………… 198
10.4.2. Значения даты…………………………………………………………………………………………………….. 201
10.4.3. Значения времени……………………………………………………………………………………………….. 204
10.4.4. Временне отметки…………………………………………………………………………………………….. 207
10.5. Вывод календаря…………………………………………………………………………………………………………….. 213
10.5.1. Вывод календаря в текстовом виде…………………………………………………………………… 213
10.5.2. Вывод календаря в формате HTML………………………………………………………………….. 215
10.5.3. Другие полезные функции………………………………………………………………………………….. 217
10.6. Измерение времени выполнения фрагментов кода………………………………………………………. 220
Глава 11. Функции………………………………………………………………………………. 222
11.1. Определение и вызов функции……………………………………………………………………………………….. 222
11.1.1. Расположение определений функций……………………………………………………………….. 224
11.1.2. Локальные и глобальные переменные……………………………………………………………… 225
11.1.3. Позиционные и именованные параметры………………………………………………………… 228
11.1.4. Необязательные параметры………………………………………………………………………………. 230
11.1.5. Произвольное количество параметров…………………………………………………………….. 231
11.1.6. Распаковка последовательностей и отображений………………………………………….. 233
11.1.7. Функция как значение. Функции обратного вызова………………………………………… 233
11.2. Анонимные функции……………………………………………………………………………………………………….. 234
11.3. Функции-генераторы………………………………………………………………………………………………………. 236
11.4. Декораторы функций……………………………………………………………………………………………………… 237
11.5. Рекурсия…………………………………………………………………………………………………………………………… 239
11.6. Вложенные функции……………………………………………………………………………………………………….. 240
11.7. Аннотации функций………………………………………………………………………………………………………… 242
Глава 12. Модули, пакеты и импорт…………………………………………………….. 243
12.1. Импорт модуля целиком…………………………………………………………………………………………………. 243
12.2. Импорт отдельных идентификаторов…………………………………………………………………………… 246
12.2.1. Указание идентификаторов, доступных для импорта…………………………………….. 248
12.2.2. Управление доступом к идентификаторам………………………………………………………. 248
12.3. Пути поиска модулей……………………………………………………………………………………………………… 249
12.4. Перезагрузка модулей……………………………………………………………………………………………………. 251
12.5. Пакеты……………………………………………………………………………………………………………………………… 252
Глава 13. Объекты и классы………………………………………………………………… 256
13.1. Определение классов, создание объектов и работа с ними………………………………………… 256
13.2. Атрибуты класса…………………………………………………………………………………………………………….. 259
13.3. Конструкторы и деструкторы……………………………………………………………………………………….. 260
13.4. Наследование………………………………………………………………………………………………………………….. 261
13.4.1. Множественное наследование………………………………………………………………………….. 263
13.4.1.1. Примеси и их использование………………………………………………………………. 265
13.5. Специальные методы……………………………………………………………………………………………………… 266
13.6. Перегрузка операторов………………………………………………………………………………………………….. 269
13.7. Статические методы и методы класса………………………………………………………………………….. 271
13.8. Абстрактные методы………………………………………………………………………………………………………. 272
13.9. Закрытые атрибуты и методы……………………………………………………………………………………….. 273
13.10. Свойства………………………………………………………………………………………………………………………… 274
13.11. Декораторы классов…………………………………………………………………………………………………….. 276
Глава 14. Исключения и их обработка…………………………………………………. 278
14.1. Обработчики исключений……………………………………………………………………………………………… 279
14.2. Обработчики контекстов………………………………………………………………………………………………… 283
14.3. Классы встроенных исключений…………………………………………………………………………………… 285
14.4. Генерирование исключений…………………………………………………………………………………………… 287
14.5. Пользовательские исключения………………………………………………………………………………………. 289
14.6. Проверочная инструкция……………………………………………………………………………………………….. 290
Глава 15. Итераторы, контейнеры и перечисления………………………………. 292
15.1. Итераторы……………………………………………………………………………………………………………………….. 292
15.2. Контейнеры……………………………………………………………………………………………………………………… 293
15.2.1. Контейнеры-последовательности…………………………………………………………………….. 293
15.2.2. Контейнеры-отображения…………………………………………………………………………………. 295
15.3. Перечисления………………………………………………………………………………………………………………….. 296
Глава 16. Работа с файлами и каталогами……………………………………………. 302
16.1. Открытие файлов…………………………………………………………………………………………………………….. 302
16.1.1. Указание путей к файлам и каталогам……………………………………………………………… 305
16.1.2. Текущий рабочий каталог…………………………………………………………………………………. 306
16.2. Чтение и запись данных: объектные инструменты……………………………………………………… 307
16.3. Чтение и запись данных: низкоуровневые инструменты…………………………………………….. 313
16.4. Файлы в памяти………………………………………………………………………………………………………………. 315
16.5. Задание прав доступа к файлам и каталогам………………………………………………………………. 319
16.6. Работа с файлами……………………………………………………………………………………………………………. 321
16.7. Работа с путями………………………………………………………………………………………………………………. 325
16.8. Перенаправление ввода/вывода……………………………………………………………………………………. 326
16.9. Сохранение объектов в файлах…………………………………………………………………………………….. 328
16.10. Работа с каталогами…………………………………………………………………………………………………….. 331
16.10.1. Функция scandir()……………………………………………………………………………………………… 335
16.11. Исключения, генерируемые файловыми операциями……………………………………………….. 337
Глава 17. Работа с механизмами Windows…………………………………………….. 338
17.1. Работа с реестром…………………………………………………………………………………………………………… 338
17.1.1. Открытие и закрытие ветвей реестра………………………………………………………………… 339
17.1.2. Чтение и запись данных реестра……………………………………………………………………….. 340
17.1.3. Перебор элементов и вложенных ветвей реестра……………………………………………. 343
17.2. Получение путей к системным каталогам……………………………………………………………………. 344
17.3. Создание ярлыков…………………………………………………………………………………………………………… 345
Часть II. Библиотека PyQt 6………………………………………………………. 347
Глава 18. Введение в PyQt 6…………………………………………………………………. 349
18.1. Установка PyQt 6…………………………………………………………………………………………………………….. 349
18.2. Первая оконная программа……………………………………………………………………………………………. 349
18.3. Структура PyQt-программы…………………………………………………………………………………………… 350
18.4. ООП-стиль создания окна………………………………………………………………………………………………. 352
18.5. Создание окон с помощью программы Qt Designer……………………………………………………… 356
18.5.1. Создание окон…………………………………………………………………………………………………….. 356
18.5.2. Использование UI-файла в программе……………………………………………………………… 359
18.5.3. Преобразование UI-файла в модуль Python…………………………………………………….. 361
18.6. Модули PyQt 6………………………………………………………………………………………………………………… 362
18.7. Управление циклом обработки событий………………………………………………………………………. 363
18.8. Многопоточные программы………………………………………………………………………………………….. 365
18.8.1. Потоки………………………………………………………………………………………………………………….. 365
18.8.2. Управление потоками………………………………………………………………………………………… 368
18.8.3. Очереди……………………………………………………………………………………………………………….. 372
18.8.4. Блокировщики и автоблокировщики………………………………………………………………… 376
18.9. Вывод заставки……………………………………………………………………………………………………………….. 379
Глава 19. Окна…………………………………………………………………………………….. 382
19.1. Создание и вывод окон…………………………………………………………………………………………………… 382
19.1.1. Типы окон……………………………………………………………………………………………………………. 383
19.2. Размеры окон и управление ими……………………………………………………………………………………. 384
19.3. Местоположение окна и управление им………………………………………………………………………. 387
19.4. Классы, задающие координаты и размеры………………………………………………………………….. 390
19.4.1. Класс QPoint: координаты точки……………………………………………………………………… 390
19.4.2. Класс QSize: размеры прямоугольной области……………………………………………….. 391
19.4.3. Класс QRect: координаты и размеры прямоугольной области………………………. 393
19.5. Разворачивание и сворачивание окон………………………………………………………………………….. 399
19.6. Управление прозрачностью окна………………………………………………………………………………….. 401
19.7. Модальные окна……………………………………………………………………………………………………………… 401
19.8. Смена значка окна………………………………………………………………………………………………………….. 403
19.9. Изменение цвета фона окна……………………………………………………………………………………………. 404
19.10. Вывод изображения в качестве фона………………………………………………………………………….. 405
19.11. Окна произвольной формы…………………………………………………………………………………………… 406
19.12. Всплывающие и расширенные подсказки………………………………………………………………….. 408
19.13. Программное закрытие окна……………………………………………………………………………………….. 409
19.14. Использование таблиц стилей CSS для оформления окон………………………………………… 409
Глава 20. Обработка сигналов и событий…………………………………………….. 414
20.1. Назначение обработчиков сигналов…………………………………………………………………………….. 414
20.1.1. Слоты…………………………………………………………………………………………………………………… 417
20.1.2. Передача данных в обработчик сигнала…………………………………………………………. 418
20.2. Блокировка и удаление обработчиков сигналов…………………………………………………………. 419
20.3. Генерирование сигналов………………………………………………………………………………………………… 421
20.4. Пользовательские сигналы…………………………………………………………………………………………….. 421
20.5. Использование таймеров……………………………………………………………………………………………….. 423
20.6. Обработка всех событий………………………………………………………………………………………………… 426
20.7. События окна………………………………………………………………………………………………………………….. 429
20.7.1. Изменение состояния окна…………………………………………………………………………………. 429
20.7.2. Изменение местоположения и размеров окна………………………………………………….. 430
20.7.3. Перерисовка окна или его части……………………………………………………………………….. 431
20.7.4. Предотвращение закрытия окна……………………………………………………………………….. 431
20.8. События клавиатуры……………………………………………………………………………………………………… 432
20.8.1. Управление фокусом ввода……………………………………………………………………………….. 432
20.8.2. Назначение клавиш быстрого доступа…………………………………………………………….. 435
20.8.3. Нажатие и отпускание клавиш………………………………………………………………………….. 437
20.9. События мыши………………………………………………………………………………………………………………… 439
20.9.1. Нажатие и отпускание кнопок мыши……………………………………………………………….. 439
20.9.2. Перемещение курсора мыши……………………………………………………………………………… 440
20.9.3. Наведение и увод курсора мыши………………………………………………………………………. 441
20.9.4. Прокрутка колесика мыши………………………………………………………………………………… 441
20.9.5. Изменение курсора мыши………………………………………………………………………………….. 442
20.10. Операция перетаскивания (drag & drop)……………………………………………………………………… 443
20.10.1. Запуск перетаскивания…………………………………………………………………………………….. 443
20.10.1.1. Задание перетаскиваемых данных………………………………………………….. 445
20.10.2. Обработка перетаскивания и сброса……………………………………………………………… 446
20.11. Работа с буфером обмена…………………………………………………………………………………………….. 448
20.12. Фильтрация событий……………………………………………………………………………………………………. 449
20.13. Генерирование событий………………………………………………………………………………………………. 450
20.14. Пользовательские события………………………………………………………………………………………….. 450
Глава 21. Размещение компонентов в окнах. Контейнеры…………………… 451
21.1. Абсолютное позиционирование……………………………………………………………………………………. 451
21.2. Контейнеры–стопки………………………………………………………………………………………………………… 452
21.3. Контейнер-сетка……………………………………………………………………………………………………………… 455
21.4. Контейнер-форма……………………………………………………………………………………………………………. 457
21.5. Стеки………………………………………………………………………………………………………………………………… 460
21.6. Управление размерами компонентов……………………………………………………………………………. 461
21.7. Группа……………………………………………………………………………………………………………………………… 462
21.8. Панель с рамкой……………………………………………………………………………………………………………… 464
21.9. Панель с вкладками………………………………………………………………………………………………………… 465
21.10. Аккордеон……………………………………………………………………………………………………………………… 469
21.11. Панель с изменяемыми областями………………………………………………………………………………. 471
21.12. Прокручиваемая панель………………………………………………………………………………………………. 473
Глава 22. Основные компоненты…………………………………………………………. 475
22.1. Надпись……………………………………………………………………………………………………………………………. 475
22.2. Кнопка……………………………………………………………………………………………………………………………… 477
22.3. Переключатель……………………………………………………………………………………………………………….. 479
22.4. Флажок…………………………………………………………………………………………………………………………….. 480
22.5. Поле ввода……………………………………………………………………………………………………………………….. 480
22.5.1. Основные методы и сигналы……………………………………………………………………………… 481
22.5.2. Ввод данных по маске………………………………………………………………………………………… 484
22.5.3. Контроль ввода с помощью валидаторов………………………………………………………… 485
22.6. Область редактирования……………………………………………………………………………………………….. 486
22.6.1. Основные методы и сигналы……………………………………………………………………………… 486
22.6.2. Задание параметров области редактирования……………………………………………….. 488
22.6.3. Указание параметров текста и фона…………………………………………………………………. 490
22.6.4. Класс QTextDocument…………………………………………………………………………………………. 491
22.6.5. Класс QTextCursor………………………………………………………………………………………………. 494
22.7. Текстовый браузер………………………………………………………………………………………………………….. 497
22.8. Поля для ввода целых и вещественных чисел……………………………………………………………… 499
22.9. Поля для ввода даты и времени…………………………………………………………………………………….. 501
22.10. Календарь……………………………………………………………………………………………………………………… 504
22.11. Семисегментный индикатор………………………………………………………………………………………… 506
22.12. Индикатор процесса…………………………………………………………………………………………………….. 507
22.13. Шкала с ползунком………………………………………………………………………………………………………. 508
22.14. Круговая шкала с ползунком………………………………………………………………………………………. 510
22.15. Полоса прокрутки…………………………………………………………………………………………………………. 511
22.16. Веб-браузер…………………………………………………………………………………………………………………… 511
Глава 23. Списки и таблицы………………………………………………………………… 516
23.1. Раскрывающийся список………………………………………………………………………………………………… 516
23.1.1. Добавление, изменение и удаление элементов………………………………………………… 516
23.1.2. Изменение параметров списка…………………………………………………………………………… 517
23.1.3. Поиск элементов…………………………………………………………………………………………………. 518
23.1.4. Сигналы……………………………………………………………………………………………………………….. 519
23.2. Список для выбора шрифта…………………………………………………………………………………………… 519
23.3. Роли элементов……………………………………………………………………………………………………………….. 520
23.4. Модели…………………………………………………………………………………………………………………………….. 521
23.4.1. Доступ к данным внутри модели………………………………………………………………………. 521
23.4.2. Класс QStringListModel……………………………………………………………………………………… 523
22.4.3. Класс QStandardItemModel………………………………………………………………………………… 524
23.4.4. Класс QStandardItem………………………………………………………………………………………….. 528
23.5. Представления………………………………………………………………………………………………………………… 531
23.5.1. Класс QAbstractItemView……………………………………………………………………………………. 532
23.5.2. Простой список…………………………………………………………………………………………………… 535
23.5.3. Таблица……………………………………………………………………………………………………………….. 537
23.5.4. Иерархический список……………………………………………………………………………………….. 539
23.5.5. Управление заголовками строк и столбцов……………………………………………………… 541
23.6. Управление выделением элементов………………………………………………………………………………. 544
22.7. Промежуточные модели…………………………………………………………………………………………………. 546
23.8. Использование делегатов………………………………………………………………………………………………. 547
Глава 24. Работа с базами данных……………………………………………………….. 551
24.1. Соединение с базой данных…………………………………………………………………………………………… 551
24.2. Получение сведений о структуре таблиц……………………………………………………………………… 554
24.2.1. Получение сведений о таблицах……………………………………………………………………….. 554
24.2.2. Получение сведений о полях таблиц………………………………………………………………… 555
24.2.3. Получение сведений о ключевом индексе………………………………………………………… 556
24.2.4. Получение сведений об ошибке………………………………………………………………………… 556
24.3. Выполнение SQL-запросов и получение их результатов……………………………………………. 557
24.3.1. Выполнение запросов………………………………………………………………………………………… 557
24.3.2. Обработка результатов выполнения запросов………………………………………………… 560
24.3.3. Очистка запроса…………………………………………………………………………………………………. 562
24.3.4. Получение служебных сведений о запросе……………………………………………………… 563
24.4. Модели, связанные с данными………………………………………………………………………………………. 563
24.4.1. Модель, связанная с SQL-запросом………………………………………………………………….. 563
24.4.2. Модель, связанная с таблицей…………………………………………………………………………… 565
24.4.3. Модель, поддерживающая межтабличные связи…………………………………………….. 570
24.4.4. Использование связанных делегатов………………………………………………………………… 573
Глава 25. Работа с графикой………………………………………………………………… 575
25.1. Вспомогательные классы………………………………………………………………………………………………. 575
25.1.1. Класс QColor: цвет……………………………………………………………………………………………… 575
25.1.2. Класс QPen: перо………………………………………………………………………………………………… 579
25.1.3. Класс QBrush: кисть……………………………………………………………………………………………. 580
25.1.4. Класс QLine: линия…………………………………………………………………………………………….. 581
24.1.5. Класс QPolygon: многоугольник……………………………………………………………………….. 582
25.1.6. Класс QFont: шрифт…………………………………………………………………………………………… 584
25.2. Класс QPainter………………………………………………………………………………………………………………… 586
25.2.1. Рисование линий и фигур…………………………………………………………………………………… 587
25.2.2. Вывод текста……………………………………………………………………………………………………….. 589
25.2.3. Вывод изображений……………………………………………………………………………………………. 590
25.2.4. Преобразование систем координат…………………………………………………………………… 592
25.2.5. Сохранение команд рисования в файл……………………………………………………………… 593
25.3. Работа с растровыми изображениями………………………………………………………………………….. 594
25.3.1. Класс QPixmap……………………………………………………………………………………………………. 594
25.3.2. Класс QBitmap…………………………………………………………………………………………………….. 597
25.3.3. Класс QImage………………………………………………………………………………………………………. 598
25.3.4. Класс QIcon…………………………………………………………………………………………………………. 601
Глава 26. Графическая сцена……………………………………………………………….. 603
26.1. Графическая сцена…………………………………………………………………………………………………………. 603
26.1.1. Настройка графической сцены………………………………………………………………………….. 603
26.1.2. Добавление и удаление графических объектов……………………………………………….. 604
26.1.3. Добавление компонентов на сцену…………………………………………………………………… 605
26.1.4. Поиск графических объектов…………………………………………………………………………….. 605
26.1.5. Управление фокусом ввода……………………………………………………………………………….. 607
26.1.6. Управление выделением объектов……………………………………………………………………. 607
26.1.7. Прочие методы и сигналы………………………………………………………………………………….. 608
26.2. Графическое представление………………………………………………………………………………………….. 609
26.2.1. Настройка графического представления…………………………………………………………. 609
26.2.2. Преобразования между координатами представления и сцены…………………….. 611
26.2.3. Поиск объектов……………………………………………………………………………………………………. 612
26.2.4. Преобразование системы координат………………………………………………………………… 612
26.2.5. Прочие методы……………………………………………………………………………………………………. 613
26.3. Графические объекты…………………………………………………………………………………………………….. 614
26.3.1. Класс QGraphicsItem: базовый класс для графических объектов………………….. 614
26.3.1.1. Настройка графического объекта………………………………………………………. 614
26.3.1.2. Выполнение преобразований……………………………………………………………… 616
26.3.1.3. Прочие методы…………………………………………………………………………………….. 617
26.3.2. Готовые графические объекты………………………………………………………………………….. 618
26.3.2.1. Линия…………………………………………………………………………………………………….. 618
26.3.2.2. Класс QAbstractGraphicsShapeItem……………………………………………………. 618
26.3.2.3. Прямоугольник…………………………………………………………………………………….. 619
26.3.2.4. Многоугольник…………………………………………………………………………………….. 619
26.3.2.5. Эллипс…………………………………………………………………………………………………… 619
26.3.2.6. Изображение………………………………………………………………………………………… 620
26.3.2.7. Простой текст……………………………………………………………………………………….. 621
26.3.2.8. Форматированный текст……………………………………………………………………… 621
26.4. Группировка объектов……………………………………………………………………………………………………. 622
26.5. Эффекты…………………………………………………………………………………………………………………………… 623
26.5.1. Класс QGraphicsEffect………………………………………………………………………………………… 623
26.5.2. Тень………………………………………………………………………………………………………………………. 624
26.5.3. Размытие……………………………………………………………………………………………………………… 625
26.5.4. Изменение цвета………………………………………………………………………………………………….. 625
26.5.5. Изменение прозрачности……………………………………………………………………………………. 625
26.6. Обработка событий………………………………………………………………………………………………………… 626
26.6.1. События клавиатуры………………………………………………………………………………………….. 626
26.6.2. События мыши……………………………………………………………………………………………………. 627
26.6.3. Обработка перетаскивания и сброса………………………………………………………………… 630
26.6.4. Фильтрация событий………………………………………………………………………………………….. 631
26.6.5. Обработка изменения состояния объекта………………………………………………………… 631
Глава 27. Диалоговые окна………………………………………………………………….. 634
27.1. Пользовательские диалоговые окна……………………………………………………………………………… 634
27.2. Класс QDialogButtonBox………………………………………………………………………………………………… 636
27.3. Класс QMessageBox………………………………………………………………………………………………………… 639
27.3.1. Основные методы и сигналы……………………………………………………………………………… 640
27.3.2. Окно информационного сообщения………………………………………………………………….. 642
27.3.3. Окно подтверждения…………………………………………………………………………………………… 643
27.3.4. Окно предупреждающего сообщения……………………………………………………………….. 644
27.3.5. Окно критического сообщения………………………………………………………………………….. 644
27.3.6. Окно сведений о программе……………………………………………………………………………….. 645
27.3.7. Окно сведений о фреймворке Qt………………………………………………………………………… 645
27.4. Класс QInputDialog………………………………………………………………………………………………………… 646
27.4.1. Основные методы и сигналы……………………………………………………………………………… 647
27.4.2. Окно для ввода строки……………………………………………………………………………………….. 649
27.4.3. Окно для ввода целого числа…………………………………………………………………………….. 649
27.4.4. Окно для ввода вещественного числа……………………………………………………………….. 650
27.4.5. Окно для выбора пункта из списка……………………………………………………………………. 651
27.4.6. Окно для ввода большого текста………………………………………………………………………. 651
27.5. Класс QFileDialog…………………………………………………………………………………………………………… 652
27.5.1. Основные методы и сигналы……………………………………………………………………………… 653
27.5.2. Окно для выбора каталога…………………………………………………………………………………. 655
27.5.3. Окно для открытия файлов………………………………………………………………………………… 656
27.5.4. Окно для сохранения файла………………………………………………………………………………. 658
27.6. Окно для выбора цвета…………………………………………………………………………………………………… 659
27.7. Окно для выбора шрифта……………………………………………………………………………………………….. 660
27.8. Окно для вывода сообщения об ошибке……………………………………………………………………….. 661
27.9. Окно с индикатором хода процесса……………………………………………………………………………… 662
27.10. Создание многостраничного мастера………………………………………………………………………… 663
27.10.1. Класс QWizard…………………………………………………………………………………………………… 663
27.10.2. Класс QWizardPage………………………………………………………………………………………….. 667
Глава 28. Создание SDI- и MDI-программ…………………………………………….. 670
28.1. Главное окно программы……………………………………………………………………………………………….. 670
28.2. Меню и действия…………………………………………………………………………………………………………….. 675
28.2.1. Класс QMenuBar…………………………………………………………………………………………………. 675
28.2.2. Класс QMenu……………………………………………………………………………………………………….. 676
28.2.3. Контекстное меню компонента…………………………………………………………………………. 679
28.2.4. Класс QAction……………………………………………………………………………………………………… 680
28.2.5. Объединение действий-переключателей в группу…………………………………………… 683
28.3. Панели инструментов…………………………………………………………………………………………………….. 684
28.3.1. Класс QToolBar…………………………………………………………………………………………………… 685
28.3.2. Класс QToolButton……………………………………………………………………………………………… 686
28.4. Прикрепляемые панели………………………………………………………………………………………………….. 688
28.5. Строка состояния……………………………………………………………………………………………………………. 689
28.6. MDI-программы………………………………………………………………………………………………………………. 690
28.6.1. Класс QMdiArea………………………………………………………………………………………………….. 690
28.6.2. Класс QMdiSubWindow………………………………………………………………………………………. 693
28.7. Добавление значка программы в область уведомлений…………………………………………….. 694
Глава 29. Мультимедиа………………………………………………………………………… 696
29.1. Воспроизведение мультимедиа……………………………………………………………………………………… 696
29.1.1. Мультимедийный проигрыватель…………………………………………………………………….. 696
29.1.2. Звуковой выход. Воспроизведение звука…………………………………………………………. 699
29.1.3. Метаданные мультимедийного источника………………………………………………………. 704
29.1.4. Видеопанель. Воспроизведение видео……………………………………………………………… 707
29.2. Запись мультимедиа……………………………………………………………………………………………………….. 709
29.2.1. Транспорт……………………………………………………………………………………………………………. 709
29.2.2. Звуковой вход……………………………………………………………………………………………………… 710
29.2.3. Кодировщик звука и видео…………………………………………………………………………………. 710
29.2.4. Указание форматов кодирования. Запись звука………………………………………………. 712
29.2.5. Камера. Запись видео…………………………………………………………………………………………. 716
29.2.6. Кодировщик статичных изображений. Захват фото……………………………………….. 720
29.3. Воспроизведение звуковых эффектов……………………………………………………………………………. 722
Глава 30. Печать документов……………………………………………………………….. 726
30.1. Основные средства печати…………………………………………………………………………………………….. 726
30.1.1. Класс QPrinter…………………………………………………………………………………………………….. 726
30.1.2. Вывод на печать…………………………………………………………………………………………………. 729
30.1.3. Служебные классы……………………………………………………………………………………………… 735
30.1.3.1. Класс QPageSize…………………………………………………………………………………… 735
30.1.3.2. Класс QPageLayout……………………………………………………………………………… 737
30.2. Задание параметров принтера и страницы………………………………………………………………….. 739
30.2.1. Класс QPrintDialog…………………………………………………………………………………………….. 739
30.2.2. Класс QPageSetupDialog……………………………………………………………………………………. 740
30.3. Предварительный просмотр………………………………………………………………………………………….. 742
30.3.1. Класс QPrintPreviewDialog……………………………………………………………………………….. 742
30.3.2. Класс QPrintPreviewWidget……………………………………………………………………………….. 745
30.4. Класс QPrinterInfo: получение сведений об устройстве печати………………………………… 747
30.5. Класс QPdfWriter: экспорт в формат PDF…………………………………………………………………….. 749
Глава 31. Сохранение настроек программ……………………………………………. 752
31.1. Создание объекта класса QSettings………………………………………………………………………………. 752
31.2. Запись и чтение данных…………………………………………………………………………………………………. 753
31.2.1. Базовые средства записи и чтения данных………………………………………………………. 753
31.2.2. Группировка сохраняемых значений. Ключи………………………………………………….. 755
31.2.3. Запись списков……………………………………………………………………………………………………. 757
31.3. Вспомогательные методы класса QSettings…………………………………………………………………. 759
31.4. Где хранятся настройки?……………………………………………………………………………………………….. 759
Глава 32. Программа «Судоку»……………………………………………………………. 761
32.1. Правила судоку………………………………………………………………………………………………………………. 761
32.2. Описание программы «Судоку»…………………………………………………………………………………….. 762
32.3. Разработка программы…………………………………………………………………………………………………… 764
32.3.1. Подготовительные действия………………………………………………………………………………. 764
32.3.2. Класс MyLabel: ячейка поля судоку…………………………………………………………………. 764
32.3.3. Класс Widget: поле судоку………………………………………………………………………………… 768
32.3.3.1. Конструктор класса Widget………………………………………………………………… 769
32.3.3.2. Прочие методы класса Widget……………………………………………………………. 771
32.3.4. Класс MainWindow: основное окно программы………………………………………………. 775
32.3.4.1. Конструктор класса MainWindow……………………………………………………… 776
32.3.4.2. Остальные методы класса MainWindow……………………………………………. 779
32.3.5. Главный модуль………………………………………………………………………………………………….. 779
32.3.6. Копирование и вставка головоломок……………………………………………………………….. 780
32.3.6.1. Форматы данных…………………………………………………………………………………. 780
32.3.6.2. Реализация копирования и вставки в классе Widget…………………………. 780
32.3.6.3. Реализация копирования и вставки в классе MainWindow………………. 783
32.3.7. Сохранение и загрузка данных…………………………………………………………………………. 787
32.3.8. Печать и предварительный просмотр………………………………………………………………. 789
32.3.8.1. Реализация печати в классе Widget……………………………………………………. 790
32.3.8.2. Класс PreviewDialog: диалоговое окно предварительного просмотра 791
32.3.8.3. Реализация печати в классе MainWindow…………………………………………. 794
Заключение………………………………………………………………………………………….. 796
Приложение. Описание электронного архива………………………………………. 797
Предметный указатель…………………………………………………………………………. 798