QMdiSubWindow Class

QMdiSubWindow 类为QMdiArea 提供了一个子窗口类。更多

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

公共类型

enum SubWindowOption { RubberBandResize, RubberBandMove }
flags SubWindowOptions

属性

公共函数

QMdiSubWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
virtual ~QMdiSubWindow()
bool isShaded() const
int keyboardPageStep() const
int keyboardSingleStep() const
QMdiArea *mdiArea() const
void setKeyboardPageStep(int step)
void setKeyboardSingleStep(int step)
void setOption(QMdiSubWindow::SubWindowOption option, bool on = true)
void setSystemMenu(QMenu *systemMenu)
void setWidget(QWidget *widget)
QMenu *systemMenu() const
bool testOption(QMdiSubWindow::SubWindowOption option) const
QWidget *widget() const

重新实现的公共函数

virtual QSize minimumSizeHint() const override
virtual QSize sizeHint() const override

公共插槽

void showShaded()
void showSystemMenu()

信号

void aboutToActivate()
void windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)

重新实现的受保护函数

virtual void changeEvent(QEvent *changeEvent) override
virtual void childEvent(QChildEvent *childEvent) override
virtual void closeEvent(QCloseEvent *closeEvent) override
virtual void contextMenuEvent(QContextMenuEvent *contextMenuEvent) override
virtual bool event(QEvent *event) override
virtual bool eventFilter(QObject *object, QEvent *event) override
virtual void focusInEvent(QFocusEvent *focusInEvent) override
virtual void focusOutEvent(QFocusEvent *focusOutEvent) override
virtual void hideEvent(QHideEvent *hideEvent) override
virtual void keyPressEvent(QKeyEvent *keyEvent) override
virtual void leaveEvent(QEvent *leaveEvent) override
virtual void mouseDoubleClickEvent(QMouseEvent *mouseEvent) override
virtual void mouseMoveEvent(QMouseEvent *mouseEvent) override
virtual void mousePressEvent(QMouseEvent *mouseEvent) override
virtual void mouseReleaseEvent(QMouseEvent *mouseEvent) override
virtual void moveEvent(QMoveEvent *moveEvent) override
virtual void paintEvent(QPaintEvent *paintEvent) override
virtual void resizeEvent(QResizeEvent *resizeEvent) override
virtual void showEvent(QShowEvent *showEvent) override
virtual void timerEvent(QTimerEvent *timerEvent) override

详细说明

QMdiSubWindow 表示QMdiArea 中的顶层窗口,由带有窗口装饰的标题栏、内部窗口小部件以及(取决于当前样式的)窗口边框和尺寸控件组成。QMdiSubWindow 有自己的布局,它由标题栏和内部 widget 的中心区域组成。

构建 QMdiSubWindow 的最常用方法是调用QMdiArea::addSubWindow() 并将内部 widget 作为参数。您也可以自己创建一个子窗口,并通过调用setWidget() 来设置内部 widget。

在使用子窗口编程时,您可以使用与常规顶级窗口相同的 API(例如,您可以调用show(),hide(),showMaximized() 和setWindowTitle() 等函数)。

子窗口处理

QMdiSubWindow 还支持 MDI 区域中子窗口的特定行为。

默认情况下,每个 QMdiSubWindow 在 MDI 区域视口中移动时都是可见的,但也可以指定透明的窗口移动和大小调整行为,即在这些操作过程中只更新子窗口的轮廓。setOption() 函数用于启用这种行为。

isShaded() 函数可检测子窗口当前是否已着色(即窗口已折叠,只有标题栏可见)。要进入阴影模式,请调用showShaded() 函数。每当窗口状态发生变化(如窗口最小化或恢复)时,QMdiSubWindow 都会发出windowStateChanged() 信号。在激活之前,它还会发出aboutToActivate() 信号。

在键盘交互模式下,窗口可通过键盘移动和调整大小。您可以通过窗口的系统菜单进入该模式。keyboardSingleStepkeyboardPageStep 属性可控制每次按键事件中部件移动或调整大小的距离。当按下 shift 键时,使用页面步长;否则使用单步。

您还可以通过键盘更改活动窗口。同时按下 control 键和 tab 键,下一个(使用当前WindowOrder )子窗口将被激活。按下 control、shift 和 tab 键,则会激活上一个窗口。这相当于调用activateNextSubWindow() 和activatePreviousSubWindow() 。请注意,这些快捷方式会覆盖全局快捷方式,但不会覆盖QMdiArea的快捷方式。

另请参阅 QMdiArea

成员类型文档

枚举 QMdiSubWindow::SubWindowOption
flags QMdiSubWindow::SubWindowOptions

该枚举描述了自定义QMdiSubWindow 行为的选项。

常量描述
QMdiSubWindow::RubberBandResize0x4如果启用此选项,将使用橡皮筋控件来表示子窗口的轮廓,用户将调整橡皮筋控件的大小,而不是子窗口本身的大小。因此,子窗口将保持其原始位置和大小,直到调整操作完成,此时它将收到一个QResizeEvent 。默认情况下,该选项是禁用的。
QMdiSubWindow::RubberBandMove0x8如果启用该选项,将使用橡皮筋控件来表示子窗口的轮廓,用户移动的是橡皮筋控件而不是子窗口本身。因此,在移动操作完成之前,子窗口将保持在其原始位置,此时将向窗口发送QMoveEvent 。默认情况下,该选项是禁用的。

SubWindowOptions 类型是QFlags<SubWindowOption> 的类型定义。它存储了 SubWindowOption 值的 OR 组合。

属性文档

keyboardPageStep : int

设置当使用键盘翻页键时,窗口部件应移动或调整大小的距离。

在键盘交互模式下,可以使用方向键和翻页键移动或调整窗口大小。该属性可控制翻页键。进入键盘交互模式的常用方法是进入子窗口菜单,然后选择 "调整大小 "或 "移动"。

默认键盘页面步长值为 20 像素。

访问功能:

int keyboardPageStep() const
void setKeyboardPageStep(int step)

另请参见 keyboardSingleStep

keyboardSingleStep : int

设置当使用键盘方向键时,窗口部件应移动或调整大小的距离。

在键盘交互模式下,可以使用箭头键和翻页键移动或调整窗口大小。该属性控制箭头键。进入键盘交互模式的常用方法是进入子窗口菜单,然后选择 "调整大小 "或 "移动"。

默认键盘单步值为 5 像素。

访问功能:

int keyboardSingleStep() const
void setKeyboardSingleStep(int step)

另请参见 keyboardPageStep

成员函数文档

QMdiSubWindow::QMdiSubWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())

构造一个新的 QMdiSubWindow widget。parentflags 参数传递给QWidget 的构造函数。

在向QMdiArea 添加子窗口时,也可以使用setParent() 代替 addSubWindow() 。

请注意,只有QMdiSubWindows 可以设置为QMdiArea 的子窗口;例如,您不能写入:

//bad code
QMdiArea mdiArea;
QTextEdit editor(&mdiArea); // invalid child widget

另请参见 QMdiArea::addSubWindow()。

[virtual noexcept] QMdiSubWindow::~QMdiSubWindow()

销毁子窗口。

另请参见 QMdiArea::removeSubWindow().

[signal] void QMdiSubWindow::aboutToActivate()

QMdiSubWindow 会在激活前立即发出该信号。子窗口激活后,管理子窗口的 也会发出 () 信号。QMdiArea subWindowActivated

另请参阅 QMdiArea::subWindowActivated() 。

[override virtual protected] void QMdiSubWindow::changeEvent(QEvent *changeEvent)

重实现:QWidget::changeEvent(QEvent *event).

[override virtual protected] void QMdiSubWindow::childEvent(QChildEvent *childEvent)

重实现:QObject::childEvent(QChildEvent *event).

[override virtual protected] void QMdiSubWindow::closeEvent(QCloseEvent *closeEvent)

重实现:QWidget::closeEvent(QCloseEvent *event).

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

重实现:QWidget::contextMenuEvent(QContextMenuEvent *event).

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

重实现:QWidget::event(QEvent *event).

[override virtual protected] bool QMdiSubWindow::eventFilter(QObject *object, QEvent *event)

重实现:QObject::eventFilter(QObject *watched, QEvent *event).

[override virtual protected] void QMdiSubWindow::focusInEvent(QFocusEvent *focusInEvent)

重实现:QWidget::focusInEvent(QFocusEvent *event).

[override virtual protected] void QMdiSubWindow::focusOutEvent(QFocusEvent *focusOutEvent)

重实现:QWidget::focusOutEvent(QFocusEvent *event).

[override virtual protected] void QMdiSubWindow::hideEvent(QHideEvent *hideEvent)

重实现:QWidget::hideEvent(QHideEvent *event).

bool QMdiSubWindow::isShaded() const

如果此窗口为阴影窗口,则返回true ;否则返回false

如果窗口折叠后只有标题栏可见,则为阴影窗口。

[override virtual protected] void QMdiSubWindow::keyPressEvent(QKeyEvent *keyEvent)

重实现:QWidget::keyPressEvent(QKeyEvent *event).

[override virtual protected] void QMdiSubWindow::leaveEvent(QEvent *leaveEvent)

重实现:QWidget::leaveEvent(QEvent *event).

QMdiArea *QMdiSubWindow::mdiArea() const

返回包含此子窗口的区域,如果没有则返回nullptr

另请参见 QMdiArea::addSubWindow()。

[override virtual] QSize QMdiSubWindow::minimumSizeHint() const

重构属性访问函数:QWidget::minimumSizeHint

[override virtual protected] void QMdiSubWindow::mouseDoubleClickEvent(QMouseEvent *mouseEvent)

重实现:QWidget::mouseDoubleClickEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::mouseMoveEvent(QMouseEvent *mouseEvent)

重实现:QWidget::mouseMoveEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::mousePressEvent(QMouseEvent *mouseEvent)

重实现:QWidget::mousePressEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::mouseReleaseEvent(QMouseEvent *mouseEvent)

重实现:QWidget::mouseReleaseEvent(QMouseEvent *event).

[override virtual protected] void QMdiSubWindow::moveEvent(QMoveEvent *moveEvent)

重实现:QWidget::moveEvent(QMoveEvent *event).

[override virtual protected] void QMdiSubWindow::paintEvent(QPaintEvent *paintEvent)

重实现:QWidget::paintEvent(QPaintEvent *event).

[override virtual protected] void QMdiSubWindow::resizeEvent(QResizeEvent *resizeEvent)

重实现:QWidget::resizeEvent(QResizeEvent *event).

警告: 当最大化或还原子窗口时,对该函数的调用可能会产生一个无效的QResizeEvent::oldSize().

void QMdiSubWindow::setOption(QMdiSubWindow::SubWindowOption option, bool on = true)

如果on 为真,则子窗口上的option 将启用;否则将禁用。有关各选项的效果,请参见SubWindowOption

另请参阅 SubWindowOptiontestOption()。

void QMdiSubWindow::setSystemMenu(QMenu *systemMenu)

systemMenu 设置为该子窗口的当前系统菜单。

默认情况下,每个QMdiSubWindow 都有一个标准系统菜单。

QMdiSubWindow 为系统菜单创建的 QActions 将根据当前窗口状态自动更新;例如,窗口最小化后,最小化操作将被禁用。

用户添加的 QActions 不会被QMdiSubWindow 更新。

QMdiSubWindow 将获得 的所有权;您不必删除它。任何现有菜单都将被删除。systemMenu

另请参阅 systemMenu() 和showSystemMenu()。

void QMdiSubWindow::setWidget(QWidget *widget)

widget 设置为子窗口的内部 widget。内部 widget 显示在子窗口中央的标题栏下方。

QMdiSubWindow 获取 的临时所有权;您不必删除它。任何现有的内部 widget 都将被移除,并重新分配给根窗口。widget

另请参阅 widget().

[override virtual protected] void QMdiSubWindow::showEvent(QShowEvent *showEvent)

重实现:QWidget::showEvent(QShowEvent *event).

[slot] void QMdiSubWindow::showShaded()

调用此函数将使子窗口进入阴影模式。当子窗口着色时,只有标题栏可见。

虽然并非所有样式都支持着色,但无论是否支持着色,该函数仍会将子窗口显示为着色。但是,当与不支持阴影的样式一起使用时,用户将无法通过用户界面(例如通过标题栏中的阴影按钮)从阴影模式返回。

另请参阅 isShaded()。

[slot] void QMdiSubWindow::showSystemMenu()

在标题栏系统菜单图标下方显示系统菜单。

另请参阅 setSystemMenu() 和systemMenu()。

[override virtual] QSize QMdiSubWindow::sizeHint() const

重构属性访问函数:QWidget::sizeHint

QMenu *QMdiSubWindow::systemMenu() const

返回指向当前系统菜单的指针,如果未设置系统菜单,则返回 0。QMdiSubWindow 提供了默认系统菜单,但也可以使用setSystemMenu() 设置菜单。

另请参阅 setSystemMenu() 和showSystemMenu()。

bool QMdiSubWindow::testOption(QMdiSubWindow::SubWindowOption option) const

如果option 已启用,则返回true ;否则返回false

另请参阅 SubWindowOptionsetOption()。

[override virtual protected] void QMdiSubWindow::timerEvent(QTimerEvent *timerEvent)

重实现:QObject::timerEvent(QTimerEvent *event).

QWidget *QMdiSubWindow::widget() const

返回当前内部 widget。

另请参阅 setWidget()。

[signal] void QMdiSubWindow::windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)

QMdiSubWindow oldState 是窗口状态改变前的状态,而 是新的当前状态。newState

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