(1)本类的继承关系如下 :

(2)本类是配合 QMdiArea 类来使用的。因为还没有学习 QMdiArea。对本类的测试也不会太到位。只能结合学过的知识来举例测试。
本类的属性很少 :

(3)本类的公共成员函数 :

++测试一下 :

++继续 :

(4)本类的信号函数 :

(5) 本类的槽函数 :

++本类的代码完毕。本类的使用,主要还是要结合 QMdiArea 才可以更好的理解。
(6) 本类定义于头文件 qmdisubwindow . h :
#ifndef QMDISUBWINDOW_H
#define QMDISUBWINDOW_H
#include <QtWidgets/qtwidgetsglobal.h>
#include <QtWidgets/qwidget.h>
QT_REQUIRE_CONFIG(mdiarea);
QT_BEGIN_NAMESPACE
class QMenu;
class QMdiArea;
namespace QMdi { class ControlContainer; }
class QMdiSubWindowPrivate;
/*
The QMdiSubWindow class provides a subwindow class for QMdiArea.
Detailed Description :
QMdiSubWindow表示QMdiArea中的顶级窗口,
并包含带有窗口装饰的标题栏、一个内部小部件,以及(取决于当前样式)一个窗口边框和大小抓手。
QMdiSubWindow有自己的布局,其中包括标题栏以及用于放置内部小部件的中心区域。
构建QMdiSubWindow的最常见方法是调用QMdiArea::addSubWindow ()方法,并将内部小部件作为参数传递。
您也可以自行创建子窗口,并通过调用setWidget()方法来设置内部小部件。
在使用子窗口进行编程时,您将使用与常规顶层窗口相同的API
(例如,您可以调用诸如 show()、hide()、showMaximized()和setWindowTitle()等函数。
Subwindow Handling :
QMdisubWindow还支持MDI区域中子窗口特有的行为。
默认情况下,当在MDI区域视口中进行移动时,每个QMdiSubWindow都是可见的,
但也可以指定透明窗口的移动和缩放行为,即在这些操作期间只更新子窗口的轮廓。
使用setOption()函数来启用此行为。
isShaded()'函数检测子窗口当前是否处于阴影模式(即窗口被折叠,只显示标题栏)。
要进入阴影模式,请调用`showShaded()'。
`QMdisubWindow`在窗口状态发生变化时(例如,当窗口被最小化或恢复时)会发出`windowStateChanged()、信号。
在激活之前,它还会发出`aboutToActivate()'信号。
在键盘交互模式下,窗口可通过键盘进行移动和大小调整。您可以通过窗口的系统菜单进入此模式。
keyboardSingleStep`和`keyboardPageStep`属性控制每个按键事件时控件移动或调整的大小范围。
当按下 Shift 键时,使用页面步长;否则使用单步长。
您还可以通过键盘来切换活动窗口。
同时按下控制键和Tab键,将激活下一个(基于当前窗口顺序)子窗口。
按下控制键、Shift键和Tab键,将激活上一个窗口。
这相当于调用`activateNextSubWindow()`和`activatePreviousSubWindow()函数。
请注意,这些快捷键会覆盖全局快捷键,但不影响QMdiAreas快捷键。
*/
class Q_WIDGETS_EXPORT QMdiSubWindow : public QWidget
{
Q_OBJECT
//设置使用键盘箭头键时,小部件应移动或调整大小的距离。
//在键盘交互模式下,您可以使用箭头键和页面键移动或调整窗口大小。此属性控制箭头键。
//常用的进入键盘交互方式是进入子窗口菜单,选择“调整大小”或“移动”。
Q_PROPERTY(int keyboardSingleStep //默认键盘单步值为5像素。
READ keyboardSingleStep WRITE setKeyboardSingleStep)
//设置在使用键盘页面键时,小部件应移动或调整大小的距离。
Q_PROPERTY(int keyboardPageStep //默认键盘页面步长值为20像素。
READ keyboardPageStep WRITE setKeyboardPageStep)
private:
Q_DISABLE_COPY(QMdiSubWindow)
Q_DECLARE_PRIVATE(QMdiSubWindow)
Q_PRIVATE_SLOT(d_func(), void _q_updateStaysOnTopHint())
Q_PRIVATE_SLOT(d_func(), void _q_enterInteractiveMode())
Q_PRIVATE_SLOT(d_func(), void _q_processFocusChanged(QWidget *, QWidget *))
friend class QMdiAreaPrivate;
friend class QMdiAreaTabBar;
friend class QMdi::ControlContainer;
public:
//构造一个新的QMdiSubWindow小部件。parent和标志 flags参数传递给QWidget的构造函数。
//除了使用addSubWindow()之外,你也可以在将子窗口添加到QMdiArea时简单地使用setParent()。
//请注意,只有QMdiSubWindow可以作为QMdiArea的子窗口.
QMdiSubWindow(QWidget * parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
~QMdiSubWindow();
// Q_PROPERTY(int keyboardSingleStep //默认键盘单步值为5像素。
// READ keyboardSingleStep WRITE setKeyboardSingleStep)
int keyboardSingleStep() const;
void setKeyboardSingleStep(int step);
// Q_PROPERTY(int keyboardPageStep //默认键盘页面步长值为20像素。
// READ keyboardPageStep WRITE setKeyboardPageStep)
int keyboardPageStep() const;
void setKeyboardPageStep(int step);
QSize sizeHint() const override;
QSize minimumSizeHint() const override;
QWidget * maximizedButtonsWidget() const; // internal 无注释
QWidget * maximizedSystemMenuIconWidget() const; // internal
//如果此窗口是遮罩窗口,则返回true;否则返回false。
//如果窗口被折叠,使得只有标题栏可见,则该窗口被视为遮挡。
bool isShaded() const;
//返回包含此子窗口的区域,如果没有则返回nullptr。
QMdiArea * mdiArea () const;
//返回当前系统菜单的指针,如果没有设置系统菜单则返回零。QMdiSubWindow提供了一个默认的系统菜单。
//但您也可以通过setSystemMenu()来设置菜单。
QMenu * systemMenu() const;
void setSystemMenu(QMenu * systemMenu);
//Sets systemMenu as the current system menu for this subwindow.
//默认情况下,每个QMdiSubWindow都有一个标准的系统菜单。
//由QMdiSubWindow创建的用于系统菜单的QActions将根据当前窗口状态自动更新;
//例如,在窗口最小化后最小化操作将被禁用。用户添加的QActions不会被QMdiSubWindow更新。
//QMdiSubWindow将系统菜单的控制权接管;你不需要删除它。任何现有的菜单都将被删除。
//返回当前内部组件。
QWidget * widget() const;
void setWidget(QWidget * widget);
//Sets widget as the internal widget of this subwindow.
//内部小部件显示在标题栏下方的小窗口中心。
//QMdiSubWindow暂时获得小部件的所有权;您无需将其删除。
//任何现有的内部小部件将被移除并重新关联到根窗口。
//此枚举描述了自定义QMdisubWindow行为的选项。
enum SubWindowOption {
AllowOutsideAreaHorizontally = 0x1, // internal //无注释
AllowOutsideAreaVertically = 0x2, // internal
//如果您启用了此选项,将使用橡皮筋控制来代表子窗口的轮廓,而用户进行的是该控制而非子窗口本身的调整。
//因此,子窗口将保持其原始位置和大小,直到调整操作完成,届时它将接收到一个单一的OResizeEvent。
RubberBandResize = 0x4, //默认情况下,此选项是禁用的。RubberBand橡皮筋
RubberBandMove = 0x8 //默认情况下,此选项被禁用。
//如果您启用此选项,将使用橡皮筋控制来代表子窗口的轮廓,用户将移动这个控制而不是子窗口本身。
//因此,子窗口将保持在原位,直到移动操作完成,届时将向该窗口发送-个QMoveEvent。
};
Q_DECLARE_FLAGS(SubWindowOptions, SubWindowOption)
//如果选项已启用,则返回true;否则返回false。
bool testOption(SubWindowOption ) const;
void setOption(SubWindowOption option, bool on = true);
//If on is true, option is enabled on the subwindow; otherwise it is disabled.
Q_SIGNALS:
//enum Qt::WindowState { WindowNoState, WindowMinimized,
// WindowMaximized, WindowFullScreen, WindowActive };
//QMdiSubWindow在窗口状态发生变化后发出此信号。
//oldState是状态变化前的窗口状态,而newState 是当前的新状态。
void windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState);
void aboutToActivate();
//QMdiSubWindow 在被激活之前会立即发出这个信号。
//在子窗口被激活后,管理该子窗口的 QMdiArea也会发出subWindowActivated()信号。
public Q_SLOTS:
void showSystemMenu(); //在标题栏的系统菜单图标下方显示系统菜单。
void showShaded();
//调用此函数会使子窗口进入阴影模式。当子窗口处于阴影模式时,只有标题栏是可见的。
//虽然并非所有样式都支持阴影,但无论是否支持阴影功能,此函数仍将显示子窗口为阴影。
//然而,当与没有阴影支持的样式一起使用时,
// 用户将无法通过用户界面(例如通过标题栏中的阴影按钮)从阴影模式返回。
protected:
bool eventFilter(QObject * object, QEvent * event) override;
bool event(QEvent * event) override;
void showEvent(QShowEvent * showEvent) override;
void hideEvent(QHideEvent * hideEvent) override;
void changeEvent(QEvent * changeEvent) override;
void closeEvent(QCloseEvent * closeEvent) override;
void leaveEvent(QEvent * leaveEvent) override;
void resizeEvent(QResizeEvent * resizeEvent) override;
void timerEvent(QTimerEvent * timerEvent) override;
void moveEvent(QMoveEvent * moveEvent) override;
void paintEvent(QPaintEvent * paintEvent) override;
void mousePressEvent(QMouseEvent * mouseEvent) override;
void mouseDoubleClickEvent(QMouseEvent * mouseEvent) override;
void mouseReleaseEvent(QMouseEvent * mouseEvent) override;
void mouseMoveEvent(QMouseEvent * mouseEvent) override;
void keyPressEvent(QKeyEvent * keyEvent) override;
void contextMenuEvent(QContextMenuEvent * contextMenuEvent) override;
void focusInEvent(QFocusEvent * focusInEvent) override;
void focusOutEvent(QFocusEvent * focusOutEvent) override;
void childEvent(QChildEvent * childEvent) override;
}; //完结 class QMdiSubWindow : public QWidget
Q_DECLARE_OPERATORS_FOR_FLAGS(QMdiSubWindow::SubWindowOptions)
QT_END_NAMESPACE
#endif // QMDISUBWINDOW_H
(7)
谢谢
1246

被折叠的 条评论
为什么被折叠?



