Spec-Zone.ru › Qt 6.1

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

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

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

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

Spec-Zone.ru

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