Spec-Zone.ru › Qt 6.0

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

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

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

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

Spec-Zone.ru

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