These classes provide everything you need for a typical modern main application window, such as the main window itself, menu and tool bars, and a status bar.
可以停放在 QMainWindow 内 (或浮动在桌面上作为顶层窗口) 的小部件 | |
主应用程序窗口 | |
显示 MDI 窗口的区域 | |
用于 QMdiArea 的子窗口类 | |
用于菜单栏、上下文菜单及其它弹出菜单的菜单 Widget | |
水平菜单栏 | |
用于重置顶层窗口大小的重置大小手柄 | |
适于呈现状态信息的水平条 | |
包含一组控件的可移动面板 | |
通过界面 (把自定义 Widget 插入基于动作的容器) 扩展 QAction,譬如:工具栏 |
Qt 提供以下类为管理主窗口和关联用户界面组件:
使用 QMainWindow is straightforward. Generally, you subclass QMainWindow 并设置菜单、工具栏及停放 Widget 在 QMainWindow 构造函数。
To add a menu bar to the main window, create the menus, and add them to the main window's menu bar. Note that the QMainWindow::menuBar () function will automatically create the menu bar the first time it is called. You can also call 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); ...
Once actions have been created, you can add them to the main window components. To begin with, add them to the pop-up menus:
fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(newAct); fileMenu->addAction(openAct); ... fileMenu->addSeparator(); ...
The QToolBar and QMenu classes use Qt's action system to provide a consistent API. In the above code, some existing actions were added to the file menu with the QMenu::addAction() function. QToolBar also provides this function, making it easy to reuse actions in different parts of the main window. This avoids unnecessary duplication of work.
Create a toolbar as a child of the main window, and add the desired actions to it:
fileToolBar = addToolBar(tr("File")); fileToolBar->addAction(newAct); fileToolBar->addAction(openAct); ... fileToolbar->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea); addToolBar(Qt::TopToolBarArea, fileToolbar);
In this example, the toolbar is restricted to the top and bottom toolbar areas of the main window, and is initially placed in the top tool bar area. We can see that the actions specified by
newAct
and
openAct
will be displayed both on the toolbar and in the file menu.
QDockWidget is used in a similar way to QToolBar . You create a dock widget as a child of the main window, and add widgets as children of the dock widget:
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);
In this example, the dock widget can only be placed in the left and right dock areas, and it is initially placed in the left dock area.
The QMainWindow API lets you customize which dock widget areas occupy the four corners of the dock widget area. If required, the default can be changed with the QMainWindow::setCorner () 函数:
setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
The following diagram shows the configuration produced by the above code. Note that the left and right dock widgets will occupy the top and bottom corners of the main window in this layout.
Once all the main window components have been set up, the central widget is created and installed by using code similar to the following:
QWidget *centralWidget = new QWidget(this); setCentralWidget(centralWidget);
中心 Widget 可以是任何子类化的 QWidget .