Spec-Zone.ru › Qt 5.15

Основное окно приложения

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

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

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/archives/qt-5.11/mainwindow.html

Spec-Zone.ru

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