应用程序主窗口

主窗口类概述

这些类为典型的现代主应用程序窗口提供了一切必需的功能,例如主窗口自身、菜单和工具栏以及状态栏。

QDockWidget

一种可以在 QMainWindow 内部停靠或作为桌面上的顶层窗口浮动的部件

QMainWindow

主应用程序窗口

QMdiArea

MDI 窗口显示的区域

QMdiSubWindow

QMdiArea 的子窗口类

QMenu

用于菜单栏、上下文菜单和其他弹出菜单的菜单部件

QMenuBar

水平菜单栏

QSizeGrip

用于调整顶层窗口大小的调整手柄

QStatusBar

适合展示状态信息的水平栏

QToolBar

QToolBar

QWidgetAction

扩展 QAction,提供了将自定义部件插入基于动作的容器(如工具栏)的接口

主窗口类

Qt 提供了以下类来管理主窗口及其相关用户界面组件

  • QMainWindow 是构建应用程序的核心类。与辅助的 QDockWidgetQToolBar 类一起,它代表了应用程序的最高级用户界面。
  • QDockWidget 提供一个可以用于创建可拆卸的工具栏或辅助窗口的部件。Dock 窗口跟踪其属性,并且它们可以作为外部窗口移动、关闭和浮动。
  • QToolBar 提供了一个通用的工具栏部件,可以容纳多个与动作相关的部件,如按钮、下拉菜单、组合框和微调框。Qt 中的统一动作模型强调,工具栏与菜单和键盘快捷键可以很好地协作。

示例代码

使用 QMainWindow 是直接的。通常,您会从 QMainWindow 继承,并在 QMainWindow 构造函数内设置菜单、工具栏和浮动窗口部件。

要将菜单栏添加到主窗口,创建菜单并将它们添加到主窗口的菜单栏。请注意,QMainWindow::menuBar() 函数将在第一次调用时自动创建菜单栏。您还可以调用 QMainWindow::setMenuBar() 使用主窗口中的自定义菜单栏。

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    ...
    newAct = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentNew),
                         tr("&New"), this);
    newAct->setShortcuts(QKeySequence::New);
    newAct->setStatusTip(tr("Create a new file"));
    connect(newAct, &QAction::triggered, this, &MainWindow::newFile);

    openAct = new QAction(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen),
                          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。《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 指定的动作将在工具栏和文件菜单中显示。

类似于 QToolBar,使用 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);

在本例中,窗格只能在左侧和右侧的窗格区域内放置,并且初始位于左侧窗格区域。

QMainWindow API 允许您自定义哪个窗格区域占据窗格区域的四个角。如果需要,可以通过 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 的任何子类。

© 2024 Qt 公司。本文件中的文档贡献归其各自所有者所有。本文件提供的文档根据自由软件基金会发布的 GNU 自由文档许可版本 1.3 的条款提供许可。Qt 及其相关标志是芬兰的 Qt 公司及其在全球的商标。所有其他商标均为其各自所有者的财产。