Основное окно приложения
Обзор классов главного окна
Эти классы предоставляют всё необходимое для типичного современного главного окна приложения, включая само главное окно, меню и панели инструментов, строку состояния и т.д.
Абстрактное действие пользовательского интерфейса, которое может быть вставлено в виджеты |
|
Группирует действия вместе |
|
Виджет, который можно прикрепить внутри QMainWindow или открепить как окно верхнего уровня на рабочем столе |
|
Главное окно приложения |
|
Область, в которой отображаются окна MDI |
|
Класс подокна для QMdiArea |
|
Виджет меню для использования в строках меню, контекстных меню и других всплывающих меню |
|
Горизонтальная строка меню |
|
Маркер изменения размера для изменения размера окон верхнего уровня |
|
Горизонтальная полоса, подходящая для отображения статусной информации |
|
Перемещаемая панель, содержащая набор элементов управления |
|
Расширяет QAction интерфейсом для вставки пользовательских виджетов в контейнеры действий, такие как панели инструментов |
Классы главного окна
Qt предоставляет следующие классы для управления главными окнами и связанными компонентами пользовательского интерфейса:
- QMainWindow — центральный класс, вокруг которого можно строить приложения. Вместе со вспомогательными классами QDockWidget и QToolBar он представляет собой главный пользовательский интерфейс приложения.
- QDockWidget предоставляет виджет, который можно использовать для создания открепляемых панелей инструментов или вспомогательных окон. Виджеты QDockWidget отслеживают свои собственные свойства и могут перемещаться, закрываться и открепляться как внешние окна.
- QToolBar предоставляет универсальный виджет панели инструментов, который может содержать ряд различных виджетов, связанных с действиями, таких как кнопки, выпадающие меню, комбинированные поля и ползунки. Акцент на единой модели действий в Qt означает, что панели инструментов хорошо взаимодействуют с меню и сочетаниями клавиш.
Пример кода
Использование QMainWindow простое. Обычно мы наследуем от QMainWindow и настраиваем меню, панели инструментов и виджеты QDockWidget внутри конструктора QMainWindow.
Для добавления строки меню в главное окно мы просто создаём меню и добавляем их в строку меню главного окна. Обратите внимание, что функция QMainWindow::menuBar() автоматически создаст строку меню при первом вызове. Также можно вызвать QMainWindow::setMenuBar() для использования пользовательской строки меню в главном окне.
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
...
newAct = new QAction(tr("&New"), this);
newAct->setShortcuts(QKeySequence::New);
newAct->setStatusTip(tr("Create a new file"));
connect(newAct, &QAction::triggered, this, &MainWindow::newFile);
openAct = new QAction(tr("&Open..."), this);
openAct->setShortcuts(QKeySequence::Open);
openAct->setStatusTip(tr("Open an existing file"));
connect(openAct, &QAction::triggered, this, &MainWindow::open);
... После создания действий их можно добавить в компоненты главного окна. Вначале добавляем их во всплывающие меню:
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);
fileMenu->addAction(openAct);
...
fileMenu->addSeparator();
... Классы QToolBar и QMenu используют систему действий Qt, чтобы обеспечить согласованный API. В приведенном выше коде некоторые существующие действия были добавлены в меню «Файл» с помощью функции QMenu::addAction(). QToolBar также предоставляет эту функцию, что упрощает повторное использование действий в разных частях главного окна. Это позволяет избежать излишнего дублирования работы.
Мы создаём панель инструментов как дочерний элемент главного окна и добавляем необходимые действия в неё:
fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);
fileToolBar->addAction(openAct);
...
fileToolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
addToolBar(Qt::TopToolBarArea, fileToolbar); В этом примере панель инструментов ограничена верхними и нижними областями панели инструментов главного окна и по умолчанию расположена в верхней области. Мы можем видеть, что действия, указанные в newAct и openAct, будут отображаться как на панели инструментов, так и в меню «Файл».
QDockWidget используется аналогично QToolBar. Мы создаём виджет QDockWidget как дочерний элемент главного окна и добавляем виджеты в качестве дочерних элементов виджета QDockWidget:
contentsWindow = new QDockWidget(tr("Table of Contents"), this);
contentsWindow->setAllowedAreas(Qt::LeftDockWidgetArea
| Qt::RightDockWidgetArea);
addDockWidget(Qt::LeftDockWidgetArea, contentsWindow);
headingList = new QListWidget(contentsWindow);
contentsWindow->setWidget(headingList); В этом примере виджет QDockWidget может быть размещён только в левой и правой областях и по умолчанию располагается в левой области.
API QMainWindow позволяет программисту настроить, какие области виджетов QDockWidget занимают четыре угла области виджета QDockWidget. При необходимости, значения по умолчанию можно изменить с помощью функции QMainWindow::setCorner():
setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
На следующей диаграмме показана конфигурация, созданная приведенным выше кодом. Обратите внимание, что левые и правые виджеты QDockWidget займут верхний и нижний углы главного окна в данной компоновке.
После настройки всех компонентов главного окна центральный виджет создаётся и устанавливается с помощью кода, аналогичного следующему:
QWidget *centralWidget = new QWidget(this); setCentralWidget(centralWidget);
Центральным виджетом может быть любой подкласс QWidget.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/mainwindow.html