Spec-Zone.ru › Qt 5.13

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

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

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

QAction

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

QActionGroup

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

QWidgetAction

Расширяет QAction, предоставляя интерфейс для вставки пользовательских виджетов в контейнеры действий, такие как панели инструментов

QDockWidget

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

QMainWindow

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

QMdiArea

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

QMdiSubWindow

Класс подокна для QMdiArea

QMenu

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

QMenuBar

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

QSizeGrip

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

QStatusBar

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

QToolBar

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

Классы главного окна

Qt предоставляет следующие классы для управления главными окнами и связанными компонентами пользовательского интерфейса:

  • QMainWindow — это центральный класс, на основе которого можно создавать приложения. Вместе с сопутствующими классами QDockWidget и QToolBar он представляет собой главный пользовательский интерфейс приложения.
  • QDockWidget предоставляет виджет, который можно использовать для создания отключаемых панелей инструментов или вспомогательных окон. Виджеты привязки отслеживают свои собственные свойства и могут перемещаться, закрываться и плавать как внешние окна.
  • QToolBar предоставляет универсальный виджет панели инструментов, который может содержать ряд различных виджетов, связанных с действиями, таких как кнопки, выпадающие меню, комбинированные поля и ползунки. Акцент на единой модели действий в Qt означает, что панели инструментов хорошо взаимодействуют с меню и сочетаниями клавиш.

Пример кода

Использование QMainWindow довольно просто. Обычно мы наследуем от QMainWindow и настраиваем меню, панели инструментов и виджеты привязки внутри конструктора 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. Мы создаем виджет привязки как дочерний элемент главного окна и добавляем виджеты как дочерние элементы виджета привязки:

    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);

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

API QMainWindow позволяет программисту настраивать, какие области виджетов привязки занимают четыре угла области виджета привязки. При необходимости, значение по умолчанию можно изменить с помощью функции QMainWindow::setCorner():

setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea);
setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);

На диаграмме ниже показана конфигурация, созданная приведенным выше кодом. Обратите внимание, что левые и правые виджеты привязки будут занимать верхний и нижний углы главного окна в данной компоновке.

После настройки всех компонентов главного окна центральный виджет создаётся и устанавливается с помощью кода, аналогичного следующему:

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.13/mainwindow.html

Spec-Zone.ru

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