应用程序主窗口
主窗口类概述
这些类提供了典型的现代应用程序主窗口所需的一切,如主窗口本身、菜单栏、工具栏和状态栏。
可停靠在 QMainWindow 内或作为顶层窗口浮动在桌面上的小工具 | |
主应用程序窗口 | |
显示 MDI 窗口的区域 | |
QMdiArea 的子窗口类 | |
用于菜单栏、上下文菜单和其他弹出式菜单的菜单部件 | |
水平菜单栏 | |
用于调整顶层窗口大小的调整柄 | |
用于显示状态信息的水平条 | |
包含一组控件的可移动面板 | |
通过一个接口扩展了 QAction,该接口用于将自定义窗口小部件插入工具栏等基于操作的容器中。 |
主窗口类
Qt 提供了以下用于管理主窗口和相关用户界面组件的类:
- QMainWindow 主窗口类是可围绕其构建应用程序的中心类。它与配套的 和 类一起,代表了应用程序的顶级用户界面。QDockWidget QToolBar
- QDockWidget Dock Widget 提供了一个可用于创建可拆卸工具面板或辅助窗口的 Widget。Dock widget 可跟踪自身属性,并可作为外部窗口移动、关闭和浮动。
- QToolBar 在 Windows XP 中,"工具栏 "提供了一个通用工具栏 widget,可以容纳许多不同的与操作相关的 widget,如按钮、下拉菜单、组合框和旋转框。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 XML 的动作系统来提供一致的 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);
在本例中,停靠窗口小部件只能放置在左侧和右侧停靠区,而且最初是放置在左侧停靠区。
QMainWindow API 可以让你自定义哪个 dock 部件区域占据 dock 部件区域的四个角。如果需要,可以使用QMainWindow::setCorner() 函数更改默认值:
setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
下图显示了上述代码生成的配置。请注意,在这种布局中,左右两个 dock 部件将占据主窗口的上下两角。
设置好所有主窗口部件后,就可以使用类似下面的代码创建并安装中央部件:
中心部件可以是QWidget 的任何子类。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.