Опубликовано

Представляем книгу “Qt 6. Разработка оконных приложений на C++”

Qt 6. Разработка оконных приложений на C++

В нашем издательстве опубликована книга Николая Прохоренка “Qt 6. Разработка оконных приложений на C++“.

Описываются базовые возможности библиотеки Qt, позволяющей создавать приложения с графическим интерфейсом на языке C++. Книга ориентирована на тех, кто уже знаком с языком программирования C++ и хотел бы научиться разрабатывать оконные приложения. Рассматриваются способы обработки событий, управление свойствами окна, создание формы, а также все основные компоненты (кнопки, текстовые поля, списки, таблицы, меню и др.) и варианты их размещения внутри окна. Книга содержит большое количество практических примеров, помогающих начать разрабатывать приложения с графическим интерфейсом самостоятельно. Она будет полезна в качестве самоучителя для начинающих разработчиков. Читатели, уже имеющие опыт, могут использовать ее как удобный справочник.

  • Управление окном приложения
  • Обработка сигналов и событий
  • Размещение компонентов внутри окна
  • Основные компоненты
  • Списки и таблицы
  • Работа с графикой и изображениями
  • Графическая сцена
  • Диалоговые окна
  • SDI- и MDI-приложения
  • Редактор Qt Creator

От автора

Qt — это популярная библиотека, позволяющая создавать приложения с графическим интерфейсом на языке C++. Она очень проста в использовании и идеально подходит для разработки приложений практически любой сложности. Библиотека является кросс-платформенной, поэтому мы можем создавать оконные приложения под Windows, Linux и Mac, а также мобильные приложения под Android и iOS.

В этой книге мы рассмотрим процесс создания оконных приложений применитель- но к операционной системе Windows. Для сборки приложений будем пользоваться компилятором MinGW, а для набора кода — редактором Qt Creator, входящим в состав библиотеки Qt.

Для полного понимания материала книги от читателя потребуется знание языка C++.

Чтобы уменьшить размер книги, основная часть кода примеров вынесена в отдельные проекты, которые расположены в электронном архиве. Электронный архив можно загрузить с сервера издательства «БХВ-Петербург» по ссылке https://zip.bhv.ru/9785977511803.zip или со страницы книги на сайте www.bhv.ru (см. приложение).

Желаю приятного изучения и надеюсь, что книга поможет вам реализовать как самые простые, так и самые сложные приложения.

Книгу можно купить в нашем интернет-магазине.

Введение………………………………………………………………………………………………….. 9

Глава 1. Первые шаги……………………………………………………………………………. 11

1.1. Создание структуры каталогов…………………………………………………………………………………………. 12

1.2. Добавление пути в переменную PATH………………………………………………………………………………. 12

1.3. Работа с командной строкой……………………………………………………………………………………………… 14

1.4. Установка Qt 6…………………………………………………………………………………………………………………….. 14

1.5. Настройка редактора Qt Creator……………………………………………………………………………………….. 23

1.6. Первая программа на Qt…………………………………………………………………………………………………….. 27

1.7. Структура программы………………………………………………………………………………………………………… 32

1.8. Запуск приложения двойным щелчком на значке файла………………………………………………… 35

1.9. ООП-стиль создания окна…………………………………………………………………………………………………… 36

1.10. Создание проекта с формой…………………………………………………………………………………………….. 39

1.11. Доступ к документации……………………………………………………………………………………………………. 45

Глава 2. Работа с символами и строками……………………………………………….. 47

2.1. Псевдонимы для элементарных типов………………………………………………………………………………. 47

2.2. Класс QChar: символ в кодировке Unicode………………………………………………………………………. 48

2.2.1. Создание объекта…………………………………………………………………………………………………….. 48

2.2.2. Изменение регистра символа…………………………………………………………………………………… 50

2.2.3. Проверка типа содержимого символа……………………………………………………………………. 51

2.3. Класс QString: строка в кодировке Unicode……………………………………………………………………… 53

2.3.1. Создание объекта…………………………………………………………………………………………………….. 53

2.3.2. Преобразование объекта в другой тип данных…………………………………………………….. 54

2.3.3. Получение и изменение размера строки………………………………………………………………… 55

2.3.4. Доступ к отдельным символам……………………………………………………………………………….. 58

2.3.5. Перебор символов строки………………………………………………………………………………………… 59

2.3.6. Итераторы…………………………………………………………………………………………………………………. 60

2.3.7. Конкатенация строк…………………………………………………………………………………………………. 62

2.3.8. Добавление и вставка символов……………………………………………………………………………… 63

2.3.9. Удаление символов………………………………………………………………………………………………….. 64

2.3.10. Изменение регистра символов………………………………………………………………………………. 68

2.3.11. Получение фрагмента строки……………………………………………………………………………….. 69

2.3.12. Поиск в строке………………………………………………………………………………………………………… 70

2.3.13. Замена в строке………………………………………………………………………………………………………. 73

2.3.14. Сравнение строк…………………………………………………………………………………………………….. 75

2.3.15. Преобразование строки в число……………………………………………………………………………. 77

2.3.16. Преобразование числа в строку……………………………………………………………………………. 79

2.3.17. Форматирование строки………………………………………………………………………………………… 80

2.3.18. Разделение строки на подстроки по разделителю………………………………………………. 81

2.4. Класс QStringList: список строк………………………………………………………………………………………… 83

2.4.1. Создание объекта…………………………………………………………………………………………………….. 83

2.4.2. Вставка элементов……………………………………………………………………………………………………. 84

2.4.3. Определение и изменение количества элементов………………………………………………….. 87

2.4.4. Удаление элементов…………………………………………………………………………………………………. 88

2.4.5. Доступ к элементам………………………………………………………………………………………………….. 91

2.4.6. Итераторы…………………………………………………………………………………………………………………. 93

2.4.7. Перебор элементов…………………………………………………………………………………………………… 95

2.4.8. Сортировка списка…………………………………………………………………………………………………… 95

2.4.9. Получение фрагмента списка………………………………………………………………………………….. 95

2.4.10. Поиск элементов…………………………………………………………………………………………………….. 96

2.4.11. Замена элементов…………………………………………………………………………………………………… 98

2.4.12. Фильтрация списка………………………………………………………………………………………………… 99

2.4.13. Преобразование списка в строку………………………………………………………………………… 100

Глава 3. Управление окном приложения……………………………………………… 101

3.1. Создание и отображение окна…………………………………………………………………………………………. 101

3.2. Указание типа окна…………………………………………………………………………………………………………… 103

3.3. Изменение и получение размеров окна…………………………………………………………………………… 105

3.4. Местоположение окна на экране…………………………………………………………………………………….. 109

3.4.1. Получение информации о размере экрана…………………………………………………………… 110

3.5. Указание координат и размеров……………………………………………………………………………………… 113

3.5.1. Класс QPoint: координаты точки…………………………………………………………………………. 113

3.5.2. Класс QSize: размеры прямоугольной области…………………………………………………… 115

3.5.3. Класс QRect: координаты и размеры прямоугольной области………………………….. 118

3.6. Разворачивание и сворачивание окна…………………………………………………………………………….. 125

3.7. Управление прозрачностью окна……………………………………………………………………………………. 127

3.8. Модальные окна……………………………………………………………………………………………………………….. 128

3.9. Смена значка в заголовке окна………………………………………………………………………………………… 130

3.10. Изменение цвета фона окна……………………………………………………………………………………………. 132

3.11. Использование изображения в качестве фона……………………………………………………………… 134

3.12. Создание окна произвольной формы……………………………………………………………………………. 136

3.13. Всплывающие подсказки……………………………………………………………………………………………….. 137

3.14. Закрытие окна из программы………………………………………………………………………………………… 139

Глава 4. Обработка сигналов и событий………………………………………………. 141

4.1. Назначение обработчиков сигналов………………………………………………………………………………. 141

4.2. Блокировка и удаление обработчика……………………………………………………………………………… 147

4.3. Генерация сигнала из программы…………………………………………………………………………………… 151

4.4. Использование таймеров………………………………………………………………………………………………….. 153

4.5. Класс QTimer: таймер……………………………………………………………………………………………………….. 156

4.6. Перехват всех событий…………………………………………………………………………………………………….. 160

4.7. События окна…………………………………………………………………………………………………………………….. 164

4.7.1. Изменение состояния окна…………………………………………………………………………………….. 164

4.7.2. Изменение положения окна и его размеров…………………………………………………………. 167

4.7.3. Перерисовка окна или его части…………………………………………………………………………… 169

4.7.4. Предотвращение закрытия окна…………………………………………………………………………… 170

4.8. События клавиатуры………………………………………………………………………………………………………… 171

4.8.1. Установка фокуса ввода………………………………………………………………………………………… 172

4.8.2. Назначение клавиш быстрого доступа………………………………………………………………… 177

4.8.3. Нажатие и отпускание клавиши клавиатуры……………………………………………………… 181

4.9. События мыши………………………………………………………………………………………………………………….. 183

4.9.1. Нажатие и отпускание кнопки мыши…………………………………………………………………… 183

4.9.2. Перемещение указателя…………………………………………………………………………………………. 185

4.9.3. Наведение и выведение указателя………………………………………………………………………… 186

4.9.4. Прокрутка колесика мыши……………………………………………………………………………………. 186

4.9.5. Изменение внешнего вида указателя мыши…………………………………………………………. 187

4.10. Технология drag & drop………………………………………………………………………………………………….. 190

4.10.1. Запуск перетаскивания………………………………………………………………………………………… 190

4.10.2. Класс QMimeData…………………………………………………………………………………………………. 192

4.10.3. Обработка сброса………………………………………………………………………………………………… 195

4.11. Работа с буфером обмена………………………………………………………………………………………………. 198

Глава 5. Размещение нескольких компонентов в окне…………………………. 199

5.1. Абсолютное позиционирование………………………………………………………………………………………. 199

5.2. Горизонтальное и вертикальное выравнивание…………………………………………………………….. 200

5.3. Выравнивание по сетке…………………………………………………………………………………………………….. 204

5.4. Выравнивание компонентов формы………………………………………………………………………………… 206

5.5. Классы QStackedLayout и QStackedWidget…………………………………………………………………….. 209

5.6. Класс QSizePolicy……………………………………………………………………………………………………………… 210

5.7. Объединение компонентов в группу……………………………………………………………………………….. 212

5.8. Панель с рамкой………………………………………………………………………………………………………………… 214

5.9. Панель с вкладками………………………………………………………………………………………………………….. 216

5.10. Компонент «аккордеон»…………………………………………………………………………………………………. 221

5.11. Панели с изменяемым размером……………………………………………………………………………………. 224

5.12. Область с полосами прокрутки……………………………………………………………………………………… 226

Глава 6. Основные компоненты…………………………………………………………… 229

6.1. Надпись……………………………………………………………………………………………………………………………… 229

6.2. Командная кнопка…………………………………………………………………………………………………………….. 234

6.3. Переключатель………………………………………………………………………………………………………………….. 237

6.4. Флажок………………………………………………………………………………………………………………………………. 238

6.5. Однострочное текстовое поле…………………………………………………………………………………………. 239

6.5.1. Основные методы и сигналы…………………………………………………………………………………. 239

6.5.2. Ввод данных по маске……………………………………………………………………………………………. 245

6.5.3. Контроль ввода………………………………………………………………………………………………………. 246

6.6. Многострочное текстовое поле……………………………………………………………………………………….. 247

6.6.1. Основные методы и сигналы…………………………………………………………………………………. 247

6.6.2. Изменение настроек поля………………………………………………………………………………………. 251

6.6.3. Изменение характеристик текста и фона……………………………………………………………… 254

6.6.4. Класс QTextDocument…………………………………………………………………………………………….. 256

6.6.5. Класс QTextCursor………………………………………………………………………………………………….. 260

6.7. Текстовый браузер……………………………………………………………………………………………………………. 265

6.8. Поля для ввода целых и вещественных чисел………………………………………………………………… 267

6.9. Поля для ввода даты и времени……………………………………………………………………………………….. 270

6.10. Календарь……………………………………………………………………………………………………………………….. 273

6.11. Электронный индикатор………………………………………………………………………………………………… 276

6.12. Индикатор процесса……………………………………………………………………………………………………….. 277

6.13. Шкала с ползунком…………………………………………………………………………………………………………. 279

6.14. Класс QDial……………………………………………………………………………………………………………………… 281

6.15. Полоса прокрутки…………………………………………………………………………………………………………… 282

Глава 7. Списки и таблицы………………………………………………………………….. 283

7.1. Раскрывающийся список………………………………………………………………………………………………….. 283

7.1.1. Добавление, изменение и удаление элементов……………………………………………………. 283

7.1.2. Изменение настроек……………………………………………………………………………………………….. 285

7.1.3. Поиск элемента внутри списка……………………………………………………………………………… 287

7.1.4. Сигналы…………………………………………………………………………………………………………………… 288

7.2. Список для выбора шрифта……………………………………………………………………………………………… 288

7.3. Роли элементов………………………………………………………………………………………………………………….. 289

7.4. Модели………………………………………………………………………………………………………………………………. 290

7.4.1. Доступ к данным внутри модели………………………………………………………………………….. 290

7.4.2. Класс QStringListModel…………………………………………………………………………………………. 292

7.4.3. Класс QStandardItemModel……………………………………………………………………………………. 293

7.4.4. Класс QStandardItem……………………………………………………………………………………………… 297

7.5. Представления…………………………………………………………………………………………………………………… 302

7.5.1. Класс QAbstractItemView……………………………………………………………………………………….. 302

7.5.2. Простой список………………………………………………………………………………………………………. 307

7.5.3. Таблица…………………………………………………………………………………………………………………… 309

7.5.4. Иерархический список…………………………………………………………………………………………… 312

7.5.5. Управление заголовками строк и столбцов…………………………………………………………. 315

7.6. Управление выделением элементов………………………………………………………………………………… 319

7.7. Промежуточные модели…………………………………………………………………………………………………… 322

Глава 8. Работа с графикой………………………………………………………………….. 325

8.1. Вспомогательные классы…………………………………………………………………………………………………. 325

8.1.1. Класс QColor: цвет…………………………………………………………………………………………………. 326

8.1.2. Класс QPen: перо……………………………………………………………………………………………………. 332

8.1.3. Класс QBrush: кисть……………………………………………………………………………………………….. 333

8.1.4. Класс QLine: линия………………………………………………………………………………………………… 334

8.1.5. Класс QPolygon: многоугольник…………………………………………………………………………… 335

8.1.6. Класс QFont: шрифт………………………………………………………………………………………………. 337

8.2. Класс QPainter………………………………………………………………………………………………………………….. 340

8.2.1. Рисование линий и фигур………………………………………………………………………………………. 341

8.2.2. Вывод текста…………………………………………………………………………………………………………… 344

8.2.3. Вывод изображения……………………………………………………………………………………………….. 346

8.2.4. Преобразование систем координат………………………………………………………………………. 348

8.2.5. Сохранение команд рисования в файл…………………………………………………………………. 349

8.3. Работа с изображениями………………………………………………………………………………………………….. 350

8.3.1. Класс QPixmap……………………………………………………………………………………………………….. 350

8.3.2. Класс QBitmap………………………………………………………………………………………………………… 354

8.3.3. Класс QImage………………………………………………………………………………………………………….. 355

8.3.4. Класс QIcon…………………………………………………………………………………………………………….. 360

Глава 9. Графическая сцена…………………………………………………………………. 363

9.1. Класс QGraphicsScene: сцена………………………………………………………………………………………….. 363

9.1.1. Настройка параметров сцены………………………………………………………………………………. 364

9.1.2. Добавление и удаление графических объектов…………………………………………………… 365

9.1.3. Добавление компонентов на сцену………………………………………………………………………. 366

9.1.4. Поиск объектов……………………………………………………………………………………………………….. 367

9.1.5. Управление фокусом ввода…………………………………………………………………………………… 368

9.1.6. Управление выделением объектов……………………………………………………………………….. 369

9.1.7. Прочие методы и сигналы……………………………………………………………………………………… 370

9.2. Класс QGraphicsView: представление…………………………………………………………………………….. 371

9.2.1. Настройка параметров представления………………………………………………………………… 372

9.2.2. Преобразования между координатами представления и сцены………………………… 373

9.2.3. Поиск объектов……………………………………………………………………………………………………….. 374

9.2.4. Трансформация систем координат……………………………………………………………………….. 375

9.2.5. Прочие методы……………………………………………………………………………………………………….. 375

9.3. Класс QGraphicsItem: базовый класс для графических объектов………………………………… 376

9.3.1. Настройка параметров объекта……………………………………………………………………………. 377

9.3.2. Трансформация объекта………………………………………………………………………………………… 381

9.3.3. Прочие методы……………………………………………………………………………………………………….. 381

9.4. Графические объекты……………………………………………………………………………………………………….. 382

9.4.1. Линия……………………………………………………………………………………………………………………….. 383

9.4.2. Класс QAbstractGraphicsShapeItem………………………………………………………………………. 383

9.4.3. Прямоугольник……………………………………………………………………………………………………….. 384

9.4.4. Многоугольник……………………………………………………………………………………………………….. 384

9.4.5. Эллипс…………………………………………………………………………………………………………………….. 384

9.4.6. Изображение…………………………………………………………………………………………………………… 385

9.4.7. Простой текст…………………………………………………………………………………………………………. 386

9.4.8. Форматированный текст……………………………………………………………………………………….. 387

9.5. Группировка объектов……………………………………………………………………………………………………… 389

9.6. Эффекты…………………………………………………………………………………………………………………………….. 389

9.6.1. Класс QGraphicsEffect……………………………………………………………………………………………. 390

9.6.2. Тень………………………………………………………………………………………………………………………….. 390

9.6.3. Размытие…………………………………………………………………………………………………………………. 392

9.6.4. Изменение цвета……………………………………………………………………………………………………… 392

9.6.5. Изменение прозрачности……………………………………………………………………………………….. 393

9.7. Обработка событий………………………………………………………………………………………………………….. 394

9.7.1. События клавиатуры……………………………………………………………………………………………… 394

9.7.2. События мыши……………………………………………………………………………………………………….. 395

9.7.3. Обработка перетаскивания и сброса……………………………………………………………………. 399

9.7.4. Фильтрация событий……………………………………………………………………………………………… 401

9.7.5. Обработка изменения состояния объекта……………………………………………………………. 401

Глава 10. Диалоговые окна………………………………………………………………….. 405

10.1. Пользовательские диалоговые окна……………………………………………………………………………… 405

10.2. Класс QDialogButtonBox………………………………………………………………………………………………… 408

10.3. Класс QMessageBox………………………………………………………………………………………………………… 411

10.3.1. Основные методы и сигналы……………………………………………………………………………… 413

10.3.2. Окно для вывода обычного сообщения…………………………………………………………….. 415

10.3.3. Окно запроса подтверждения……………………………………………………………………………. 415

10.3.4. Окно для вывода предупреждающего сообщения…………………………………………… 416

10.3.5. Окно для вывода критического сообщения………………………………………………………. 417

10.3.6. Окно «О программе»…………………………………………………………………………………………… 418

10.3.7. Окно «About Qt»………………………………………………………………………………………………….. 418

10.4. Класс QInputDialog………………………………………………………………………………………………………… 418

10.4.1. Основные методы и сигналы……………………………………………………………………………… 419

10.4.2. Окна для ввода строки……………………………………………………………………………………….. 422

10.4.3. Окно для ввода целого числа…………………………………………………………………………….. 423

10.4.4. Окно для ввода вещественного числа……………………………………………………………….. 424

10.4.5. Окно для выбора пункта из списка……………………………………………………………………. 425

10.5. Класс QFileDialog…………………………………………………………………………………………………………… 426

10.5.1. Основные методы и сигналы……………………………………………………………………………… 426

10.5.2. Окно для выбора каталога…………………………………………………………………………………. 429

10.5.3. Окно для открытия файла………………………………………………………………………………….. 430

10.5.4. Окно для сохранения файла………………………………………………………………………………. 431

10.6. Окно для выбора цвета…………………………………………………………………………………………………… 432

10.7. Окно для выбора шрифта……………………………………………………………………………………………….. 433

10.8. Окно для вывода сообщения об ошибке……………………………………………………………………….. 434

10.9. Окно с индикатором хода процесса……………………………………………………………………………… 435

10.10. Создание многостраничного мастера………………………………………………………………………… 437

10.10.1. Класс QWizard…………………………………………………………………………………………………… 437

10.10.2. Класс QWizardPage………………………………………………………………………………………….. 442

Глава 11. Создание SDI- и MDI-приложений………………………………………… 447

11.1. Создание главного окна приложения……………………………………………………………………………. 447

11.2. Меню………………………………………………………………………………………………………………………………… 454

11.2.1. Класс QMenuBar…………………………………………………………………………………………………. 454

11.2.2. Класс QMenu……………………………………………………………………………………………………….. 455

11.2.3. Контекстное меню………………………………………………………………………………………………. 459

11.2.4. Класс QAction……………………………………………………………………………………………………… 460

11.2.5. Объединение переключателей в группу…………………………………………………………… 464

11.3. Панели инструментов…………………………………………………………………………………………………….. 466

11.3.1. Класс QToolBar…………………………………………………………………………………………………… 466

11.3.2. Класс QToolButton……………………………………………………………………………………………… 469

11.4. Прикрепляемые панели………………………………………………………………………………………………….. 470

11.5. Управление строкой состояния……………………………………………………………………………………… 472

11.6. MDI-приложения…………………………………………………………………………………………………………….. 474

11.6.1. Класс QMdiArea………………………………………………………………………………………………….. 474

11.6.2. Класс QMdiSubWindow………………………………………………………………………………………. 478

11.7. Добавление значка приложения в область уведомлений……………………………………………. 479

Заключение………………………………………………………………………………………….. 483

Приложение. Описание электронного архива………………………………………. 485

Предметный указатель…………………………………………………………………………. 487

Добавить комментарий