Компания ALT Linux
Опубликован: 07.03.2015 | Доступ: свободный | Студентов: 1714 / 223 | Длительность: 24:14:00

Лекция 15: Разработка приложений с графическим интерфейсом

Аннотация: Рассказывается о построении графического пользовательского интерфейса с использованием виджетов Qt.

15.1 Окна. Класс QMainWindow

Как уже отмечалось ранее, виджеты, родительский виджет для которых не задан, становятся окнами. Обычно для окон приложения используют следующие классы:

  • QMainWindow — окно приложения, которое может содержать меню, панели, строку статуса;
  • QDialog — диалоговое окно;
  • QWidget — простое, обычно немодальное окно;

Окно обычно имеет обрамление и заголовок. Текст для заголовка окна устанавливают с помощью метода QWidget::setWindowTitle(). Конструктор класса QWidget принимает дополнительный параметр, для типа окна — Qt::WindowFlags. С помощью этого параметра можно управлять типом обрамления, типом окна (для оконной системы). Например, можно создать окно без обрамления (это полезно в некоторых случаях для оформления, например, для окна загрузки программы) или деактивировать кнопки для минимизации и максимизации окна.

Окно диалога — это особый вид окна, который может использоваться для различных целей, но всегда предоставляет пользователю возможность взаимодействия с программой. Диалоги, как правило, не имеют кнопок для минимизации и максимизации окна. Окна диалога также часто бывают модальными. Модальность окна определяется его поведением. Модальные окна блокируют доступ к другим окнам, пока пользователь не завершит работу с окном (не закроет его). Задать модальность окна можно с помощью метода QWidget::setWindowModality(), если передать ему логическое значение true.

QMainWindow — класс, реализующий функциональность главного окна приложения. Для этого он дополнительно имеет специальные средства работы:

  • Главное меню (Main menu);
  • Панели инструментов (Toolbars);
  • Панель статуса (Status bar);
  • Присоединяемые панели (Docks);

Несколько элементов пользовательского интерфейса могут выполнять одно и то же действие (например: меню, кнопка на панели инструментов и т.д.). Класс QAction используют для того, чтобы привязать заданное действие к нескольким элементам управления. Благодаря группировке действия и связанных с ним данных (названия, подсказки, пиктограммы и т.д.), а также его многократного использования (в главном меню, на панели инструментов и т.д.), можно избежать дублирования кода.

Присоединяемые панели QDockWidget (dock widgets), монтируются в крае окна, и могут быть перенесены и перегруппированы пользователем, или даже разделены и размещены как отдельные окна. Обычно содержат группу элементов пользовательского интерфейса, объединенных общей целью и назначением или группу инструментов для работы с текущим открытым файлом.

Панель статуса QStatusBar (Status bar) обычно используют для изображения текстовых сообщений о статусе или текущие действия программы, но она может содержать пиктограммы, а также другие виджеты (например, индикаторы прогресса, метки).

Таким образом, воспользовавшись возможностями главного окна и создав несколько диалогов, можно получить программу, которая будет соответствовать стандартам современных пользовательских интерфейсов. До сих пор для создания интерфейса программы нам приходилось самостоятельно создавать и компоновать виджеты. В следующем параграфе мы используем для этой цели программу Qt Designer, которая позволяет создать интерфейс средствами визуального проектирования.

Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?

Alex Arhipov
Alex Arhipov
Россия, Сочи
Николай Катющев
Николай Катющев
Украина, Одесса