本页内容

QMainWindow Class

QMainWindow 类提供了一个主应用程序窗口。更多内容...

头文件: #include <QMainWindow>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
继承自: QWidget

公共类型

enum DockOption { AnimatedDocks, AllowNestedDocks, AllowTabbedDocks, ForceTabbedDocks, VerticalTabs, GroupedDragging }
flags DockOptions

属性

公共函数

QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
virtual ~QMainWindow()
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)
void addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)
void addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)
void addToolBar(QToolBar *toolbar)
QToolBar *addToolBar(const QString &title)
void addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea)
QWidget *centralWidget() const
Qt::DockWidgetArea corner(Qt::Corner corner) const
virtual QMenu *createPopupMenu()
QMainWindow::DockOptions dockOptions() const
Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget) const
bool documentMode() const
QSize iconSize() const
void insertToolBar(QToolBar *before, QToolBar *toolbar)
void insertToolBarBreak(QToolBar *before)
bool isAnimated() const
bool isDockNestingEnabled() const
QMenuBar *menuBar() const
QWidget *menuWidget() const
void removeDockWidget(QDockWidget *dockwidget)
void removeToolBar(QToolBar *toolbar)
void removeToolBarBreak(QToolBar *before)
void resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)
bool restoreDockWidget(QDockWidget *dockwidget)
bool restoreState(const QByteArray &state, int version = 0)
QByteArray saveState(int version = 0) const
void setCentralWidget(QWidget *widget)
void setCorner(Qt::Corner corner, Qt::DockWidgetArea area)
void setDockOptions(QMainWindow::DockOptions options)
void setDocumentMode(bool enabled)
void setIconSize(const QSize &iconSize)
void setMenuBar(QMenuBar *menuBar)
void setMenuWidget(QWidget *menuBar)
void setStatusBar(QStatusBar *statusbar)
void setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition)
void setTabShape(QTabWidget::TabShape tabShape)
void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)
void splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)
QStatusBar *statusBar() const
QTabWidget::TabPosition tabPosition(Qt::DockWidgetArea area) const
QTabWidget::TabShape tabShape() const
QList<QDockWidget *> tabifiedDockWidgets(QDockWidget *dockwidget) const
void tabifyDockWidget(QDockWidget *first, QDockWidget *second)
QWidget *takeCentralWidget()
Qt::ToolBarArea toolBarArea(const QToolBar *toolbar) const
bool toolBarBreak(QToolBar *toolbar) const
Qt::ToolButtonStyle toolButtonStyle() const
bool unifiedTitleAndToolBarOnMac() const

公共槽位

void setAnimated(bool enabled)
void setDockNestingEnabled(bool enabled)
void setUnifiedTitleAndToolBarOnMac(bool set)

信号

void iconSizeChanged(const QSize &iconSize)
void tabifiedDockWidgetActivated(QDockWidget *dockWidget)
void toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle)

重新实现的受保护函数

virtual void contextMenuEvent(QContextMenuEvent *event) override
virtual bool event(QEvent *event) override

详细说明

Qt 主窗口框架

主窗口为构建应用程序的用户界面提供了一个框架。 Qt 提供了 QMainWindow 及其相关类来管理主窗口。QMainWindow 拥有自己的布局,您可以在其中添加QToolBar、QDockWidget、QMenuBar 以及QStatusBar 。该布局有一个中心区域,可容纳任何类型的控件。您可以在下图中看到该布局的示意图。

主窗口及其组件位置示意图

创建主窗口组件

中心小部件通常是标准的 Qt 小部件,例如QTextEdit 或QGraphicsView 。对于高级应用程序,也可以使用自定义小部件。您可以通过setCentralWidget() 设置中心小部件。

主窗口具有单文档界面(SDI)或多文档界面(MDI)。在 Qt 中,通过将 `QMdiArea ` 作为中心控件来创建 MDI 应用程序。

接下来,我们将逐一探讨可添加到主窗口的其他控件,并提供创建和添加这些控件的示例。

创建菜单

Qt 在QMenu 中实现了菜单,而 QMainWindow 将其保存在QMenuBar 中。QAction会被添加到菜单中,并作为菜单项显示。

您可以通过调用menuBar() (该函数返回窗口的QMenuBar )将新菜单添加到主窗口的菜单栏中,然后使用QMenuBar::addMenu()添加菜单。

QMainWindow 自带默认菜单栏,但您也可以通过setMenuBar() 自行设置。如果您希望实现自定义菜单栏(即不使用QMenuBar 控件),可以使用setMenuWidget() 进行设置。

以下是一个创建菜单的示例:

    void MainWindow::createMenus()
    {
        fileMenu = menuBar()->addMenu(tr("&File"));
        fileMenu->addAction(newAct);
        fileMenu->addAction(openAct);
        fileMenu->addAction(saveAct);

createPopupMenu() 函数会在主窗口接收到上下文菜单事件时创建弹出菜单。默认实现会根据停靠控件和工具栏中的可选操作生成菜单。若要创建自定义菜单,可重写createPopupMenu() 函数。

创建工具栏

工具栏在QToolBar 类中实现。您可以通过addToolBar() 将工具栏添加到主窗口中。

您可以通过将工具栏分配给特定的Qt::ToolBarArea 来控制其初始位置。您可以使用addToolBarBreak() 或insertToolBarBreak() 插入工具栏分隔符(可将其视为文本编辑中的换行符)来分割区域。您还可以通过QToolBar::setAllowedAreas() 和QToolBar::setMovable() 限制用户对工具栏的放置位置。

可通过iconSize() 获取工具栏图标的大小。大小取决于平台;您可以使用setIconSize() 设置固定大小。您可以通过setToolButtonStyle() 更改工具栏中所有工具按钮的外观。

以下是一个创建工具栏的示例:

    void MainWindow::createToolBars()
    {
        fileToolBar = addToolBar(tr("File"));
        fileToolBar->addAction(newAct);

创建停靠控件

Dock 小部件由QDockWidget 类实现。Dock 小部件是一种可以停靠在主窗口中的窗口。您可以通过addDockWidget() 将 Dock 小部件添加到主窗口中。

Qt::DockWidgetArea 枚举提供了四个停靠控件区域:left、right、top和bottom。 您可以使用 `setCorner()` 指定应占据区域重叠处角落的停靠控件区域。默认情况下,每个区域只能包含一行(垂直或水平)停靠控件,但如果启用嵌套功能(使用 `setDockNestingEnabled()`),则可以沿任意方向添加停靠控件。

两个停靠控件也可以堆叠在一起。此时,将使用QTabBar 来选择应显示哪个控件。

下面是一个关于如何创建并向主窗口添加停靠控件的示例:

QDockWidget *dockWidget = new QDockWidget(tr("Dock Widget"), this);
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea |
                            Qt::RightDockWidgetArea);
dockWidget->setWidget(dockWidgetContents);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);

状态栏

你可以通过setStatusBar() 设置状态栏,但当首次调用statusBar() (该函数返回主窗口的状态栏)时,系统会自动创建一个状态栏。有关其使用方法,请参阅QStatusBar 。

状态存储

QMainWindow 可以通过 `saveState()` 存储其布局状态;之后可通过 `restoreState()` 检索该状态。存储的内容是工具栏和停靠控件的位置及大小(相对于主窗口的大小)。

安全性注意事项

restoreState() 函数会反序列化一个带版本号的二进制数据块,该数据块描述了工具栏和停靠控件的布局,包括用于分割和标签式停靠区域的递归嵌套树结构。 虽然会验证该格式的魔数和版本,但一旦外部结构被接受,各个字段(例如停靠区域索引和嵌套布局树的深度)就不会根据主窗口的实际配置进行边界检查。

仅向 `restoreState()` 传递由 `saveState()` 先前生成并由同一版本(或兼容版本)的应用程序(通常通过 `QSettings`)持久化的 `QByteArray `。请勿使用来源未知或不可信的数据(例如从网络下载的文件、同步或共享的配置文件,或由其他可能已受损的应用程序提供的数据)调用 `restoreState()`。

另请参阅 QMenuBar 、QToolBar 、QStatusBar 、QDockWidget 以及“菜单示例”。

成员类型文档

enum QMainWindow::DockOption
flags QMainWindow::DockOptions

此枚举包含用于指定QMainWindow 停靠行为的标志。

常量值描述
QMainWindow::AnimatedDocks0x01与animated 属性相同。
QMainWindow::AllowNestedDocks0x02与dockNestingEnabled 属性相同。
QMainWindow::AllowTabbedDocks0x04用户可以将一个停靠小部件“拖放到”另一个小部件“上方”。这两个小部件将被堆叠,并出现一个标签栏,用于选择显示哪个小部件。
QMainWindow::ForceTabbedDocks0x08每个停靠区包含一组带标签页的停靠控件。换言之,在同一停靠区内,停靠控件不能并排放置。如果启用此选项,则 AllowNestedDocks 将失效。
QMainWindow::VerticalTabs0x10主窗口两侧的两个垂直停靠区会垂直显示其标签。如果未设置此选项,所有停靠区都会在底部显示标签。该选项隐含 AllowTabbedDocks。另请参阅setTabPosition()。
QMainWindow::GroupedDragging0x20拖动一个停靠区的标题栏时,与其关联的所有标签页都会被拖动。该选项隐含允许 AllowTabbedDocks。如果某些 QDockWidgets 对可放置的区域有限制,则该功能可能无法正常工作。(此枚举值在 Qt 5.6 中添加。)

这些选项仅控制如何将停靠小部件拖放到QMainWindow 中。它们不会根据指定的选项重新排列停靠小部件。因此,应在将任何停靠小部件添加到主窗口之前设置这些选项。例外情况是 AnimatedDocks 和 VerticalTabs 选项,它们可在任何时候设置。

DockOptions 类型是QFlags<DockOption> 的 typedef。它存储 DockOption 值的按“或”运算组合。

属性文档

animated : bool

该属性控制操作停靠控件和工具栏时是否显示动画效果

当将停靠控件或工具栏拖拽至主窗口上方时,主窗口会调整其内容,以显示若将控件或工具栏释放,其将被停靠的位置。设置此属性将使QMainWindow 以平滑的动画效果移动其内容。清除此属性将导致内容立即跳转至新位置。

默认情况下,此属性已启用。如果主窗口中包含调整大小或重绘速度较慢的小部件,则可以将其禁用。

设置此属性与使用 `setDockOptions()` 设置 `AnimatedDocks ` 选项的效果相同。

访问函数:

bool isAnimated() const
void setAnimated(bool enabled)

dockNestingEnabled : bool

该属性决定是否允许嵌套停靠区

如果此属性值为false ,则停靠区域只能包含一行(水平或垂直)停靠控件。如果此属性值为true ,则停靠控件所占区域可沿任意方向拆分,以容纳更多停靠控件。

仅在包含大量停靠控件的应用程序中,才需要停靠嵌套功能。它为用户提供了更大的自由度,以便组织其主窗口。 然而,当将停靠控件拖拽至主窗口时,停靠嵌套会导致行为更加复杂(且不够直观),因为被释放的停靠控件在停靠区域中可能以更多种方式被放置。

设置此属性与使用 `setDockOptions()` 设置 `AllowNestedDocks ` 选项的效果完全相同。

访问函数:

bool isDockNestingEnabled() const
void setDockNestingEnabled(bool enabled)

dockOptions : DockOptions

该属性控制QMainWindow

默认值为AnimatedDocks |AllowTabbedDocks 。

访问函数:

QMainWindow::DockOptions dockOptions() const
void setDockOptions(QMainWindow::DockOptions options)

documentMode : bool

该属性用于指定带标签的停靠小部件的标签栏是否设置为文档模式。

默认值为 false。

访问函数:

bool documentMode() const
void setDocumentMode(bool enabled)

另请参阅 QTabBar::documentMode 。

iconSize : QSize

此主窗口中工具栏图标的大小。

默认值为该GUI样式中工具栏图标的默认大小。请注意,所使用的图标尺寸必须至少达到此大小,因为系统只会将图标缩小显示。

访问函数:

QSize iconSize() const
void setIconSize(const QSize &iconSize)

tabShape : QTabWidget::TabShape

该属性存储用于带标签页的停靠控件的标签页形状。

默认值为QTabWidget::Rounded 。

访问函数:

QTabWidget::TabShape tabShape() const
void setTabShape(QTabWidget::TabShape tabShape)

另请参阅 setTabPosition()。

toolButtonStyle : Qt::ToolButtonStyle

此主窗口中工具栏按钮的样式。

若要使工具按钮的样式遵循系统设置,请将此属性设置为Qt::ToolButtonFollowStyle 。在 Unix 系统上,将采用桌面环境中的用户设置。在其他平台上,Qt::ToolButtonFollowStyle 表示仅显示图标。

默认值为Qt::ToolButtonIconOnly 。

访问函数:

Qt::ToolButtonStyle toolButtonStyle() const
void setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle)

unifiedTitleAndToolBarOnMac : bool

无论窗口在 macOS 上是否采用统一的标题栏和工具栏样式,此属性均成立

请注意,与 Qt 4 相比,Qt 5 的实现存在以下几项限制:

  • 不支持在包含 OpenGL 内容的窗口中使用。这包括 `QOpenGLWidget`。
  • 使用可停靠或可移动的工具栏可能会导致绘制错误,因此不建议使用

访问函数:

bool unifiedTitleAndToolBarOnMac() const
void setUnifiedTitleAndToolBarOnMac(bool set)

成员函数文档

[explicit] QMainWindow::QMainWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

根据给定的parent 和指定的控件flags 创建一个QMainWindow。

QMainWindow 会自行设置Qt::Window 标志,因此始终会被创建为顶级小部件。

[virtual noexcept] QMainWindow::~QMainWindow()

关闭主窗口。

void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)

将给定的dockwidget 添加到主窗口中指定的area 中。

void QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget, Qt::Orientation orientation)

将dockwidget 添加到给定的area 中,方向由orientation 指定。

void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar)

将toolbar 添加到此主窗口中指定的area 中。toolbar 将放置在当前工具栏块(即一行)的末尾。如果主窗口已经管理了toolbar ,则只会将工具栏移动到area 。

另请参阅 insertToolBar()、addToolBarBreak() 和insertToolBarBreak()。

void QMainWindow::addToolBar(QToolBar *toolbar)

相当于调用 addToolBar(Qt::TopToolBarArea,toolbar)

这是一个重载函数。

QToolBar *QMainWindow::addToolBar(const QString &title)

创建一个QToolBar 对象,将其窗口标题设置为title ,并将其插入到顶部工具栏区域。

这是一个重载函数。

另请参阅 setWindowTitle()。

void QMainWindow::addToolBarBreak(Qt::ToolBarArea area = Qt::TopToolBarArea)

在给定的area 中,于所有其他现有对象之后插入一个工具栏分隔符。

QWidget *QMainWindow::centralWidget() const

返回主窗口的中心控件。如果尚未设置中心控件,该函数将返回nullptr 。

另请参阅 setCentralWidget()。

[override virtual protected] void QMainWindow::contextMenuEvent(QContextMenuEvent *event)

重写了:QWidget::contextMenuEvent(QContextMenuEvent *event)。

Qt::DockWidgetArea QMainWindow::corner(Qt::Corner corner) const

返回占据指定corner 的Dock小部件区域。

另请参阅 setCorner()。

[virtual] QMenu *QMainWindow::createPopupMenu()

返回一个包含主窗口中现有工具栏和停靠小部件的可选中项的弹出菜单。如果主窗口中不存在工具栏和停靠小部件,则该函数返回nullptr 。

默认情况下,当用户激活上下文菜单时(通常是右键单击工具栏或停靠控件),主窗口会调用此函数。

若要创建自定义弹出菜单,请重写此函数并返回一个新创建的弹出菜单。弹出菜单的所有权将转移给调用方。

另请参阅 addDockWidget()、addToolBar() 和menuBar()。

Qt::DockWidgetArea QMainWindow::dockWidgetArea(QDockWidget *dockwidget) const

返回dockwidget 的Qt::DockWidgetArea 。如果dockwidget 尚未添加到主窗口中,则该函数返回Qt::NoDockWidgetArea 。

另请参阅 addDockWidget()、splitDockWidget() 和Qt::DockWidgetArea 。

[override virtual protected] bool QMainWindow::event(QEvent *event)

重写了:QWidget::event(QEvent *event)。

[signal] void QMainWindow::iconSizeChanged(const QSize &iconSize)

当窗口中使用的图标大小发生变化时,会发出此信号。新的图标大小将通过iconSize 传递进来。

您可以将此信号与其他组件连接,以帮助保持应用程序外观的一致性。

另请参阅 setIconSize()。

void QMainWindow::insertToolBar(QToolBar *before, QToolBar *toolbar)

将toolbar 插入到before 工具栏所占用的区域中,使其位于该工具栏之前。例如,在正常的从左到右布局操作中,这意味着在水平工具栏区域内,toolbar 将出现在由before 指定的工具栏左侧。

另请参阅 insertToolBarBreak()、addToolBar() 和addToolBarBreak()。

void QMainWindow::insertToolBarBreak(QToolBar *before)

在由before 指定的工具栏之前插入一个工具栏分隔符。

返回主窗口的菜单栏。如果菜单栏不存在,该函数会创建并返回一个空的菜单栏。

如果您希望 Mac 应用程序中的所有窗口共享一个菜单栏,请不要使用此函数来创建它,因为在此处创建的菜单栏将以该QMainWindow 作为其父级。相反,您必须创建一个没有父级的菜单栏,然后将其在所有 Mac 窗口之间共享。请按以下方式创建一个没有父级的菜单栏:

QMenuBar *menuBar = new QMenuBar(nullptr);

另请参阅 setMenuBar()。

返回主窗口的菜单栏。如果尚未构建菜单栏,则该函数返回 null。

另请参阅 setMenuWidget()。

void QMainWindow::removeDockWidget(QDockWidget *dockwidget)

将dockwidget 从主窗口布局中移除并将其隐藏。请注意,dockwidget 并未被删除。

void QMainWindow::removeToolBar(QToolBar *toolbar)

将toolbar 从主窗口布局中移除并将其隐藏。请注意,toolbar 并未被删除。

void QMainWindow::removeToolBarBreak(QToolBar *before)

删除之前插入在由 `before` 指定的工具栏前面的工具栏分隔符。

void QMainWindow::resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation orientation)

将列表docks 中的停靠控件调整为列表sizes 中对应的像素尺寸。如果orientation 为Qt::Horizontal ,则调整宽度;否则调整高度。调整后的尺寸将确保最大和最小尺寸得到保留,且QMainWindow 本身不会被调整大小。 任何多余或缺失的空间将根据各小部件尺寸的相对权重在它们之间进行分配。

示例:

    resizeDocks({blueWidget, yellowWidget}, {20 , 40}, Qt::Horizontal);

如果蓝色和小部件与黄色小部件处于同一层级,则会调整大小,使得黄色小部件的大小是蓝色小部件的两倍

如果某些控件被分组为标签页,则每个组应仅指定一个控件。未列入列表的控件可能会被调整,以满足约束条件。

bool QMainWindow::restoreDockWidget(QDockWidget *dockwidget)

如果dockwidget 是在调用restoreState()之后创建的,则恢复其状态。如果状态已恢复,则返回true ;否则返回false 。

另请参阅 restoreState() 和saveState()。

bool QMainWindow::restoreState(const QByteArray &state, int version = 0)

恢复此主窗口工具栏和停靠控件的state 。同时恢复角部设置。将version 中的数值与state 中存储的数值进行比较。如果两者不匹配,则主窗口的状态保持不变,且本函数返回false ;否则,状态将被恢复,且本函数返回true 。

要恢复使用QSettings 保存的几何信息,可以使用如下代码:

void MainWindow::readSettings()
{
    QSettings settings("MyCompany", "MyApp");
    restoreGeometry(settings.value("myWidget/geometry").toByteArray());
    restoreState(settings.value("myWidget/windowState").toByteArray());
}

另请参阅 saveState()、QWidget::saveGeometry()、QWidget::restoreGeometry() 和restoreDockWidget()。

QByteArray QMainWindow::saveState(int version = 0) const

保存此主窗口工具栏和停靠控件的当前状态。这包括可通过 `setCorner()` 设置的角落设置。version 编号作为数据的一部分被存储。

objectName QToolBar QDockWidget 属性用于标识每个 和 。您应确保此属性对于添加到QToolBar QDockWidget QMainWindow

要恢复已保存的状态,请将返回值和version 的编号传递给restoreState()。

若要在窗口关闭时保存几何图形,可以像这样实现一个关闭事件:

void MyMainWindow::closeEvent(QCloseEvent *event)
{
    QSettings settings("MyCompany", "MyApp");
    settings.setValue("geometry", saveGeometry());
    settings.setValue("windowState", saveState());
    QMainWindow::closeEvent(event);
}

另请参阅 restoreState()、QWidget::saveGeometry() 和QWidget::restoreGeometry()。

void QMainWindow::setCentralWidget(QWidget *widget)

将指定的widget 设置为主窗口的中心控件。

注意:QMainWindow 会获取对 `widget ` 指针的所有权,并在适当的时候将其删除。

另请参阅 centralWidget()。

void QMainWindow::setCorner(Qt::Corner corner, Qt::DockWidgetArea area)

将给定的停靠控件area 设置为占据指定的corner 。

另请参阅 corner()。

void QMainWindow::setMenuBar(QMenuBar *menuBar)

将主窗口的菜单栏设置为menuBar 。

注意:QMainWindow 会获取对 `menuBar ` 指针的所有权,并在适当的时候将其删除。

另请参阅 menuBar()。

void QMainWindow::setMenuWidget(QWidget *menuBar)

将主窗口的菜单栏设置为menuBar 。

QMainWindow 获取对menuBar 指针的所有权,并在适当的时候将其删除。

另请参阅 menuWidget()。

void QMainWindow::setStatusBar(QStatusBar *statusbar)

将主窗口的状态栏设置为statusbar 。

将状态栏设置为nullptr 将使其从主窗口中移除。请注意,QMainWindow 会接管statusbar 指针的所有权,并在适当的时候将其删除。

另请参阅 statusBar()。

void QMainWindow::setTabPosition(Qt::DockWidgetAreas areas, QTabWidget::TabPosition tabPosition)

将给定停靠控件areas 的标签页位置设置为指定的tabPosition 。默认情况下,所有停靠区域的标签页均显示在底部。

注意: VerticalTabs 停靠选项会覆盖此方法设置的标签页位置。

另请参阅 tabPosition() 和setTabShape()。

void QMainWindow::splitDockWidget(QDockWidget *first, QDockWidget *second, Qt::Orientation orientation)

将first 停靠小部件所占空间分为两部分,将first 停靠小部件移至第一部分,并将second 停靠小部件移至第二部分。

orientation 指定了空间的划分方式:Qt::Horizontal 分割将第二个停靠控件放置在第一个控件的右侧;Qt::Vertical 分割将第二个停靠控件放置在第一个控件的下方。

注意:如果first 当前位于一个带标签页的停靠区域中,则second 将被添加为一个新标签页,而非与first 并列。这是因为单个标签页只能包含一个停靠控件。

注意:Qt::LayoutDirection 会影响分割区域中两个部分内停靠小部件的顺序。当启用从右到左的布局方向时,停靠小部件的排列顺序将被反转。

另请参阅 tabifyDockWidget()、addDockWidget() 和removeDockWidget()。

QStatusBar *QMainWindow::statusBar() const

返回主窗口的状态栏。如果状态栏不存在,该函数将创建并返回一个空的状态栏。

另请参阅 setStatusBar()。

QTabWidget::TabPosition QMainWindow::tabPosition(Qt::DockWidgetArea area) const

返回area 的制表符位置。

注意: VerticalTabs 的 停靠选项会覆盖此函数返回的标签页位置。

另请参阅 setTabPosition() 和tabShape()。

[signal] void QMainWindow::tabifiedDockWidgetActivated(QDockWidget *dockWidget)

当通过选择标签页激活带标签页的停靠控件时,会发出此信号。被激活的停靠控件将作为参数传递给dockWidget 。

另请参阅 tabifyDockWidget() 和tabifiedDockWidgets()。

QList<QDockWidget *> QMainWindow::tabifiedDockWidgets(QDockWidget *dockwidget) const

返回与dockwidget 一起被划分为标签页的Dock控件。

另请参阅 tabifyDockWidget()。

void QMainWindow::tabifyDockWidget(QDockWidget *first, QDockWidget *second)

将second 停靠控件移至first 停靠控件上方,在first 的当前位置创建一个带标签的停靠区域。

在调用此函数之前,这两个停靠控件必须已通过addDockWidget() 添加到主窗口中,且两者均不能已是标签页形式。

另请参阅 tabifiedDockWidgets() 和addDockWidget()。

QWidget *QMainWindow::takeCentralWidget()

从该主窗口中移除中央小部件。

被移除的小部件的所有权将传递给调用方。

Qt::ToolBarArea QMainWindow::toolBarArea(const QToolBar *toolbar) const

返回toolbar 的Qt::ToolBarArea 。如果toolbar 尚未被添加到主窗口中,则该函数返回Qt::NoToolBarArea 。

另请参阅 addToolBar()、addToolBarBreak() 和Qt::ToolBarArea 。

bool QMainWindow::toolBarBreak(QToolBar *toolbar) const

返回在toolbar 之前是否存在工具栏分隔符。

另请参阅 addToolBarBreak() 和insertToolBarBreak()。

[signal] void QMainWindow::toolButtonStyleChanged(Qt::ToolButtonStyle toolButtonStyle)

当窗口中工具按钮所用的样式发生变化时,会触发此信号。新样式将通过toolButtonStyle 传递进来。

您可以将此信号连接到其他组件,以帮助保持应用程序外观的一致性。

另请参阅 setToolButtonStyle()。

© 2026 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.