应用程序主窗口
主窗口类概述
这些类为典型的现代主应用程序窗口提供了一切必需的功能,例如主窗口自身、菜单和工具栏以及状态栏。
一种可以在 QMainWindow 内部停靠或作为桌面上的顶层窗口浮动的部件 | |
主应用程序窗口 | |
MDI 窗口显示的区域 | |
QMdiArea 的子窗口类 | |
用于菜单栏、上下文菜单和其他弹出菜单的菜单部件 | |
水平菜单栏 | |
用于调整顶层窗口大小的调整手柄 | |
适合展示状态信息的水平栏 | |
QToolBar | |
扩展 QAction,提供了将自定义部件插入基于动作的容器(如工具栏)的接口 |
主窗口类
Qt 提供了以下类来管理主窗口及其相关用户界面组件
- QMainWindow 是构建应用程序的核心类。与辅助的 QDockWidget 和 QToolBar 类一起,它代表了应用程序的最高级用户界面。
- 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 的任何子类。
© 2024 Qt 公司。本文件中的文档贡献归其各自所有者所有。本文件提供的文档根据自由软件基金会发布的 GNU 自由文档许可版本 1.3 的条款提供许可。Qt 及其相关标志是芬兰的 Qt 公司及其在全球的商标。所有其他商标均为其各自所有者的财产。