QMdiSubWindow Class
QMdiSubWindow 类为QMdiArea提供了一个子窗口类。
Header | #include < QMdiSubWindow > |
---|---|
qmake | QT += widgets |
Inherits | QWidget |
Inherited By |
详细说明
QMdiSubWindow表示QMdiArea中的顶级窗口,它由带有窗口装饰的标题栏、内部小部件以及(取决于当前样式)窗口框架和大小夹点组成。QMdiSubWindow 有自己的布局,它由标题栏和内部小部件的中心区域组成。
构造QMdiSubWindow最常用的方法是使用内部小部件作为参数调用QMdiArea::addSubWindow() 。您还可以自己创建一个子窗口,并通过调用setWidget() 来设置内部小部件。
使用子窗口编程时使用的API与使用常规顶级窗口编程时使用的API相同(例如,可以调用show() 、hide() 、showmimized() 和 setWindowTitle() 等函数)。
子窗口处理
QMdiSubWindow还支持MDI区域中特定于子窗口的行为。
默认情况下,在MDI区域视口中移动时,每个QMB窗口都是可见的,但也可以指定透明窗口移动和调整大小行为,在这些操作期间,仅更新子窗口的轮廓。setOption() 函数用于启用此行为。
函数isShaded() 的作用是:检测子窗口当前是否有阴影(也就是说,窗口被折叠,只有标题栏可见)。要进入着色模式,请调用showShaded() 。每当窗口状态发生更改时(例如,当窗口最小化或恢复时),QMdiSubWindow就会发出windowStateChanged() 信号。它在被激活之前也会发出aboutToActivate() 。
在键盘交互模式下,窗口随键盘移动和调整大小。您可以通过窗口的系统菜单进入此模式。keyboardSingleStep和keyboardPageStep属性控制小部件为每个按键事件移动或调整大小的距离。当按下shift键时,使用页步;否则使用单步。
也可以用键盘更改活动窗口。同时按下control和tab键,将激活下一个(使用当前WindowOrder)子窗口。通过按control、shift和tab,您将激活上一个窗口。这相当于调用activateNextSubWindow() 和activatePreviousSubWindow() 。请注意,这些快捷方式覆盖全局快捷方式,但不覆盖QMdiAreas快捷方式。
公共类型
enum SubWindowOption
flags SubWindowOptions
此枚举描述自定义 QMdiSubWindow 行为的选项。
Constant | Value | Description |
---|---|---|
RubberBandResize | 0x4 | 如果启用此选项,将使用橡皮筋控件来表示子窗口的轮廓,并且用户将调整其大小,而不是子窗口本身。因此,子窗口将保持其原始位置和大小,直到调整大小操作完成,此时它将收到一个QResizeEvent。默认情况下,此选项处于禁用状态。 |
RubberBandMove | 0x8 | 如果启用此选项,将使用橡皮筋控件来表示子窗口的轮廓,用户将移动此控件而不是子窗口本身。因此,子窗口将保持在其原始位置,直到移动操作完成,此时会向窗口发送QMoveEvent。默认情况下,此选项处于禁用状态。 |
属性
-
keyboardPageStep: int 使用键盘页键时小部件应移动或调整大小的距离
在键盘交互模式下,可以使用箭头键和页键移动或调整窗口大小。此属性控制页键。进入键盘交互模式的常用方法是进入子窗口菜单,然后选择“resize”或“move”。
默认的键盘页步长值为20像素。- int keyboardPageStep() const
- void setKeyboardPageStep(int step)
-
keyboardSingleStep: int 使用键盘箭头键时小部件应移动或调整大小的距离
在键盘交互模式下,可以使用箭头键和页键移动或调整窗口大小。此属性控制箭头键。进入键盘交互模式的常用方法是进入子窗口菜单,然后选择“resize”或“move”。
默认的键盘单步值为5像素。- int keyboardSingleStep() const
- void setKeyboardSingleStep(int step)
公共函数
构造和析构
-
QMdiSubWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())
构造一个新的QMdiSubWindow小部件。parent和flags参数被传递给QWidget的构造函数。
当您将子窗口添加到QMdiArea时,也可以使用setParent(),而不是使用addSubWindow()。
注意,只有QMdiSubWindows可以设置为QMdiArea的子节点;例如,你不能这样写:
//bad code QMdiArea mdiArea; QTextEdit editor(&mdiArea); // invalid child widget
-
virtual ~QMdiSubWindow()
属性相关
- int keyboardPageStep() const
- void setKeyboardPageStep(int step)
- int keyboardSingleStep() const
- void setKeyboardSingleStep(int step)
其它
-
bool isShaded() const
-
QMdiArea * mdiArea() const
-
QMenu * systemMenu() const
void setSystemMenu(QMenu *systemMenu) 设置systemMenu为该子窗口的当前系统菜单默认情况下,每个QMdiSubWindow都有一个标准的系统菜单。
QMdiSubWindow创建的系统菜单的QActions将根据当前窗口状态自动更新;例如,窗口被最小化后,最小化操作将被禁用。
QMdiSubWindow不会更新用户添加的QAction。
QMdiSubWindow获得systemMenu的所有权;你不需要删除它。所有现有的菜单将被删除。 -
bool testOption(QMdiSubWindow::SubWindowOption option) const
void setOption(QMdiSubWindow::SubWindowOption option, bool on = true) -
QWidget * widget() const
void setWidget(QWidget *widget) 将小部件设置为子窗口的内部小部件内部小部件显示在标题栏下面的子窗口的中央。QMdiSubWindow获得widget的临时所有权;你不需要删除它。任何现有的内部小部件都将被删除,并重新指向根窗口。
重写的公共函数
- 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