QMdiArea 类
QMdiArea 小部件提供了一个显示 MDI 窗口区域。 更多信息...
头文件 | #include <QMdiArea> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake | QT += widgets |
继承 | QAbstractScrollArea |
公共类型
枚举 | AreaOption { DontMaximizeSubWindowOnActivation } |
标志 | AreaOptions |
枚举 | ViewMode { SubWindowView, TabbedView } |
枚举 | WindowOrder { CreationOrder, StackingOrder, ActivationHistoryOrder } |
属性
|
|
公共函数
QMdiArea(QWidget *parent = nullptr) | |
virtual | ~QMdiArea() |
QMdiArea::WindowOrder | activationOrder() const |
QMdiSubWindow * | activeSubWindow() const |
QMdiSubWindow * | addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags()) |
QBrush | background() const |
QMdiSubWindow * | currentSubWindow() const |
bool | documentMode() const |
void | removeSubWindow(QWidget *widget) |
void | setActivationOrder(QMdiArea::WindowOrder order) |
void | setBackground(const QBrush &background) |
void | setDocumentMode(bool enabled) |
void | setOption(QMdiArea::AreaOption option, bool on = true) |
void | setTabPosition(QTabWidget::TabPosition position) |
void | setTabShape(QTabWidget::TabShape shape) |
void | setTabsClosable(bool closable) |
void | setTabsMovable(bool movable) |
void | setViewMode(QMdiArea::ViewMode mode) |
QList<QMdiSubWindow *> | subWindowList(QMdiArea::WindowOrder order = CreationOrder) const |
QTabWidget::TabPosition | tabPosition() const |
QTabWidget::TabShape | tabShape() const |
bool | tabsClosable() const |
bool | tabsMovable() const |
bool | testOption(QMdiArea::AreaOption option) const |
QMdiArea::ViewMode | viewMode() const |
重载的公共函数
virtual QSize | minimumSizeHint() const override |
virtual QSize | sizeHint() const override |
公共槽函数
void | activateNextSubWindow() |
void | activatePreviousSubWindow() |
void | cascadeSubWindows() |
void | closeActiveSubWindow() |
void | closeAllSubWindows() |
void | setActiveSubWindow(QMdiSubWindow *window) |
void | tileSubWindows() |
信号
void | subWindowActivated(QMdiSubWindow *window) |
重载的保护函数
virtual void | childEvent(QChildEvent *childEvent) override |
virtual bool | event(QEvent *event) override |
virtual bool | eventFilter(QObject *object, QEvent *event) override |
virtual void | paintEvent(QPaintEvent *paintEvent) override |
virtual void | resizeEvent(QResizeEvent *resizeEvent) override |
virtual void | scrollContentsBy(int dx, int dy) override |
virtual void | showEvent(QShowEvent *showEvent) override |
virtual void | timerEvent(QTimerEvent *timerEvent) override |
virtual bool | viewportEvent(QEvent *event) override |
保护槽函数
virtual void | setupViewport(QWidget *viewport) override |
详细说明
QMdiArea函数本质上像是一个MDI窗口的管理器。例如,它将在自己身上绘制它管理的窗口,并以级联或平铺模式排列它们。QMdiArea通常用作QMainWindow的中心小部件来创建MDI应用程序,但也可以放置在任何布局中。以下代码向主窗口添加一个区域
QMainWindow *mainWindow = new QMainWindow; mainWindow->setCentralWidget(mdiArea);
与顶级窗口的管理器不同,只要当前小部件样式支持这些标志(例如Qt::WindowFlags),QMdiArea就支持所有的窗口标志。如果样式不支持特定的标志(例如,《WindowShadeButtonHint》),您仍然可以使用showShaded()函数折叠窗口。
QMdiArea中的子窗口是QMdiSubWindow的实例。它们使用addSubWindow方法添加到MDI区域。通常传递QWidget给此函数,将其设置为一个内部小部件,但也可以直接传递一个QMdiSubWindow。该类继承自QWidget,编程时可以与正常顶级窗口使用相同API。`QMdiSubWindow`还具有针对MDI窗口特定的行为。有关更多详情,请参阅《QMdiSubWindow`>类描述。
子窗口在获得键盘焦点或调用 setFocus() 函数时变为活动状态。用户通过通常的方式移动焦点来激活窗口。当活动窗口改变时,MDI区域会发出 subWindowActivated() 信号,而 activeSubWindow() 函数返回活动子窗口。
便利函数 subWindowList() 返回所有子窗口的列表。这些信息可以用于包含窗口列表的弹出菜单,例如。
子窗口按当前的 WindowOrder 排序。这用于 subWindowList(),以及用于 activateNextSubWindow() 和 activatePreviousSubWindow()。此外,在使用 cascadeSubWindows() 和 tileSubWindows() 堆叠或平铺窗口时也会用到。
QMdiArea 为子窗口提供两种内置布局策略:cascadeSubWindows() 和 tileSubWindows()。这两个都是槽函数,可以轻松地连接到菜单项。
注意: QMdiArea 的默认滚动条属性为 Qt::ScrollBarAlwaysOff。
参见 QMdiSubWindow。
成员类型文档
enum QMdiArea::AreaOption
flags QMdiArea::AreaOptions
此枚举描述了自定义 QMdiArea 行为的选项。
常量 | 值 | 描述 |
---|---|---|
QMdiArea::DontMaximizeSubWindowOnActivation | 0x1 | 当活动子窗口最大化时,默认行为是将下一个激活的子窗口最大化。如果您不希望这种行为,请设置此选项。 |
AreaOptions 类型是 QFlags<AreaOption> 的类型别名。它存储 AreaOption 值的或组合。
enum QMdiArea::ViewMode
此枚举描述了区域的查看模式;即子窗口将如何显示。
常量 | 值 | 描述 |
---|---|---|
QMdiArea::SubWindowView | 0 | 以窗口边框显示子窗口(默认)。 |
QMdiArea::TabbedView | 1 | 在标签栏中使用标签显示子窗口。 |
参见 setViewMode。
enum QMdiArea::WindowOrder
指定使用 subWindowList() 返回的子窗口列表的排序标准。当排列窗口时,cascadeSubWindows() 和 tileSubWindows() 函数遵循此顺序。
常量 | 值 | 描述 |
---|---|---|
QMdiArea::CreationOrder | 0 | 窗口以创建的顺序返回。 |
QMdiArea::StackingOrder | 1 | 窗口以堆叠的顺序返回,顶部窗口列表中的最后一个。 |
QMdiArea::ActivationHistoryOrder | 2 | 窗口以激活的顺序返回。 |
参见 subWindowList。
属性文档
activationOrder : WindowOrder
此属性包含子窗口列表的排序标准
此属性指定返回 subWindowList() 的子窗口列表的排序标准。默认情况下,它是窗口创建顺序。
访问函数
QMdiArea::WindowOrder | activationOrder() const |
void | setActivationOrder(QMdiArea::WindowOrder order) |
参见 subWindowList。
background : QBrush
此属性存储工作区的背景画笔。
此属性设置工作区区域的背景画笔。默认为灰色,但可以是任何画笔(例如,颜色、渐变或位图)。
访问函数
QBrush | background() const |
void | setBackground(const QBrush &background) |
documentMode : bool
此属性存储是否在选项卡视图模式下将标签栏设置为文档模式。
文档模式默认为禁用。
访问函数
bool | documentMode() const |
void | setDocumentMode(bool enabled) |
另请参阅QTabBar::documentMode 和 setViewMode。
tabPosition : QTabWidget::TabPosition
此属性存储选项卡视图模式下选项卡的位置。
此属性的值由 QTabWidget::TabPosition 枚举描述。
访问函数
QTabWidget::TabPosition | tabPosition() const |
void | setTabPosition(QTabWidget::TabPosition position) |
另请参阅QTabWidget::TabPosition 和 setViewMode。
tabShape : QTabWidget::TabShape
此属性存储选项卡视图模式下选项卡的形状。
此属性的值可以是默认的 QTabWidget::Rounded 或 QTabWidget::Triangular。
访问函数
QTabWidget::TabShape | tabShape() const |
void | setTabShape(QTabWidget::TabShape shape) |
另请参阅QTabWidget::TabShape 和 setViewMode。
tabsClosable : bool
此属性存储是否在选项卡视图模式下在各个选项卡上放置关闭按钮。
默认情况下,选项卡不可关闭。
访问函数
bool | tabsClosable() const |
void | setTabsClosable(bool closable) |
另请参阅QTabBar::tabsClosable 和 setViewMode。
tabsMovable : bool
此属性存储在选项卡视图模式下是否用户可以移动选项卡区域内的选项卡。
默认情况下,选项卡不可移动。
访问函数
bool | tabsMovable() const |
void | setTabsMovable(bool movable) |
另请参阅QTabBar::movable 和 setViewMode。
viewMode : ViewMode
此属性存储子窗口在 QMdiArea 中显示的方式。
默认情况下,使用 SubWindowView 显示子窗口。
访问函数
QMdiArea::ViewMode | viewMode() const |
void | setViewMode(QMdiArea::ViewMode mode) |
另请参阅ViewMode、setTabShape 和 setTabPosition。
成员函数文档
QMdiArea::QMdiArea(QWidget *parent = nullptr)
构建一个空MDI区域。参数parent传递给了QWidget的构造函数。
[virtual noexcept]
QMdiArea::~QMdiArea()
销毁MDI区域。
[slot]
void QMdiArea::activateNextSubWindow()
将键盘焦点给予子窗口列表中的另一个窗口。激活的窗口将是根据当前的激活顺序确定的下一个窗口。
另请参阅 activatePreviousSubWindow() 和 QMdiArea::WindowOrder。
[slot]
void QMdiArea::activatePreviousSubWindow()
将键盘焦点给予子窗口列表中的另一个窗口。激活的窗口将是根据当前的激活顺序确定的上一个窗口。
另请参阅 activateNextSubWindow() 和 QMdiArea::WindowOrder。
QMdiSubWindow *QMdiArea::activeSubWindow() const
返回指向当前活动子窗口的指针。如果没有窗口当前为活动状态,则返回nullptr
。
子窗口被视为具有窗口状态的最高级窗口,即,如果MDI区域外的小部件是活动窗口,则没有任何子窗口是活动的。请注意,如果MDI区域中窗口内的小部件获得焦点,窗口将被激活。
另请参阅 setActiveSubWindow() 和 Qt::WindowState。
QMdiSubWindow *QMdiArea::addSubWindow(QWidget *widget, Qt::WindowFlags windowFlags = Qt::WindowFlags())
将widget作为新的子窗口添加到MDI区域。如果windowFlags非零,则它们将覆盖小部件上设置的标志。
widget可以是QMdiSubWindow或另一个QWidget(在这种情况下,MDI区域将创建一个子窗口并将widget设置为内部小部件)。
注意:一旦子窗口被添加,它的父对象将是QMdiArea的视口小部件。
QMdiArea mdiArea; QMdiSubWindow *subWindow1 = new QMdiSubWindow; subWindow1->setWidget(internalWidget1); subWindow1->setAttribute(Qt::WA_DeleteOnClose); mdiArea.addSubWindow(subWindow1); QMdiSubWindow *subWindow2 = mdiArea.addSubWindow(internalWidget2);
当你创建自己的子窗口时,如果你想当窗口在MDI区域中关闭时被删除,你必须设置Qt::WA_DeleteOnClose小部件属性。如果不设置,则窗口将被隐藏,MDI区域不会激活下一个子窗口。
返回添加到MDI区域的QMdiSubWindow。
另请参阅 removeSubWindow。
[slot]
void QMdiArea::cascadeSubWindows()
按级联模式排列所有子窗口。
另请参阅 tileSubWindows。
[覆盖虚保护]
void QMdiArea::childEvent(QChildEvent *childEvent)
重实现: QObject::childEvent(QChildEvent *event).
[槽函数]
void QMdiArea::closeActiveSubWindow()
关闭活动子窗口。
另请参阅closeAllSubWindows。
[槽函数]
void QMdiArea::closeAllSubWindows()
通过向每个窗口发送QCloseEvent,关闭所有子窗口。在关闭之前,您可能会收到子窗口的subWindowActivated()信号(如果MDI区域在关闭另一个窗口时激活了子窗口)。
忽略关闭事件的后台窗口将保持开启状态。
另请参阅closeActiveSubWindow。
QMdiSubWindow *QMdiArea::currentSubWindow() const
返回当前子窗口的指针,如果没有当前子窗口,则返回nullptr
。
如果包含QMdiArea的QApplication是活动的,此函数将返回与activeSubWindow()相同的结果。
另请参阅activeSubWindow()和QApplication::activeWindow。
[覆盖虚保护]
bool QMdiArea::event(QEvent *event)
重实现:QAbstractScrollArea::event(QEvent *event).
[覆盖虚保护]
bool QMdiArea::eventFilter(QObject *object, QEvent *event)
重实现:QObject::eventFilter(QObject *watched, QEvent *event).
[覆盖虚]
QSize QMdiArea::minimumSizeHint() const
重实现:QAbstractScrollArea::minimumSizeHint() const.
[覆盖虚保护]
void QMdiArea::paintEvent(QPaintEvent *paintEvent)
重实现:QAbstractScrollArea::paintEvent(QPaintEvent *event).
void QMdiArea::removeSubWindow(QWidget *widget)
从MDI区域移除widget。此widget必须是QMdiSubWindow或子窗口的内部控件。注意widget绝不会由QMdiArea实际删除。如果传入QMdiSubWindow,则其父对象设置为nullptr
,并且将其移除;但如果传入内部控件,则子控件设置为nullptr
,并且QMdiSubWindow不会被移除。
另请参阅addSubWindow。
[重写虚受保护]
void QMdiArea::resizeEvent(QResizeEvent *resizeEvent)
重写: QAbstractScrollArea::resizeEvent(QResizeEvent *event).
[重写虚受保护]
void QMdiArea::scrollContentsBy(int dx, int dy)
重写: QAbstractScrollArea::scrollContentsBy(int dx, int dy).
[槽函数]
void QMdiArea::setActiveSubWindow(QMdiSubWindow *window)
激活子窗口 window。如果 window 是 nullptr
,则取消任何当前激活窗口的激活状态。
另请参阅activeSubWindow。
void QMdiArea::setOption(QMdiArea::AreaOption option, bool on = true)
如果 on 为 true,则在 MDI 面板中启用 option;否则禁用。有关每个选项的效PC路请参阅 AreaOption。
另请参阅AreaOption 和 testOption。
[重写虚受保护槽函数]
void QMdiArea::setupViewport(QWidget *viewport)
重写: QAbstractScrollArea::setupViewport(QWidget *viewport).
此槽函数在 QAbstractScrollArea 调用 setViewport() 后调用。在 QMdiArea 的子类中重写此函数以在 viewport 使用之前对其进行初始化。
另请参阅setViewport。
[重写虚受保护]
void QMdiArea::showEvent(QShowEvent *showEvent)
重写: QWidget::showEvent(QShowEvent *event).
[重写虚]
QSize QMdiArea::sizeHint() const
重写: QAbstractScrollArea::sizeHint() const.
[信号]
void QMdiArea::subWindowActivated(QMdiSubWindow *window)
当 window 被激活后, QMdiArea 发射此信号。当 window 是 nullptr
时, QMdiArea 刚才已取消其最后一个激活窗口的激活状态,并且工作空间上没有激活窗口。
另请参阅QMdiArea::activeSubWindow。
QList<QMdiSubWindow *> QMdiArea::subWindowList(QMdiArea::WindowOrder order = CreationOrder) const
返回MDI区域中所有子窗口的列表。如果order是CreationOrder(默认值),则窗口会按照它们被插入到工作区的顺序进行排序。如果order是StackingOrder,则窗口将按照它们的堆叠顺序列出,其中最顶层的窗口将是列表中的最后一个项目。如果order是ActivationHistoryOrder,则窗口将根据它们的最近激活历史进行排序。
另请参阅 WindowOrder。
bool QMdiArea::testOption(QMdiArea::AreaOption option) const
如果option被启用,则返回true
;否则返回false
。
另请参阅 AreaOption和setOption()。
[slot]
void QMdiArea::tileSubWindows()
将所有子窗口按照平铺模式排列。
另请参阅 cascadeSubWindows。
[override virtual protected]
void QMdiArea::timerEvent(QTimerEvent *timerEvent)
重新实现: QObject::timerEvent(QTimerEvent *event)
[override virtual protected]
bool QMdiArea::viewportEvent(QEvent *event)
重新实现: QAbstractScrollArea::viewportEvent(QEvent *event)
© 2024 The Qt Company Ltd. 本文档中包含的贡献的版权属于各自的拥有者。本提供的文档是根据由自由软件基金会发布的GNU自由文档许可证版本1.3的条款许可的。Qt及相关标志是The Qt Company Ltd在芬兰和/或其他国家/地区的商标。所有其他商标均为其各自所有者的财产。