Spec-Zone.ru › Qt 5.14

Главное окно приложения

Обзор классов главного окна

Эти классы предоставляют всё необходимое для типичного современного главного окна приложения, включая само главное окно, меню и панели инструментов, строку состояния и т. д.

QAction

Абстрактное действие пользовательского интерфейса, которое может быть вставлено в виджеты

QActionGroup

Группирует действия вместе

QDockWidget

Виджет, который можно прикрепить внутри QMainWindow или отвязать в виде отдельного окна на рабочем столе

QMainWindow

Главное окно приложения

QMdiArea

Область, в которой отображаются окна MDI

QMdiSubWindow

Класс дочерних окон для QMdiArea

QMenu

Виджет меню для использования в строках меню, контекстных меню и других всплывающих меню

QMenuBar

Горизонтальная строка меню

QSizeGrip

Маркер изменения размера для изменения размера окон верхнего уровня

QStatusBar

Горизонтальная панель для отображения статусной информации

QToolBar

Перемещаемая панель, содержащая набор элементов управления

QWidgetAction

Расширяет 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/qt-5.14/mainwindow.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API