当前位置: 首页 > news >正文

QT6 源,七章对话框与多窗体(17)用于辅助多文档 MDI 窗体设计 QMdiArea 的类 QMdiSubWindow:

(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_NAMESPACEclass 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 QWidgetQ_DECLARE_OPERATORS_FOR_FLAGS(QMdiSubWindow::SubWindowOptions)QT_END_NAMESPACE#endif // QMDISUBWINDOW_H

(7)

谢谢

http://www.xdnf.cn/news/1200745.html

相关文章:

  • MySQL 8.4 Windows 版安装记录与步骤参考
  • 《频率之光:群星之我》
  • mmap的调用层级与内核态陷入全过程
  • 依赖倒置原则 Dependency Inversion Principle - DIP
  • 不坑盒子突然不见了怎么办?
  • VILA系列论文解读
  • 详细解释一个ros的CMakeLists.txt文件
  • AI大模型前沿:Muyan-TTS开源零样本语音合成技术解析
  • 自然语言处理NLP (1)
  • 【I】题目解析
  • vmware虚拟机中显示“网络电缆被拔出“的解决方法
  • rust-包和箱子
  • RHEL9 网络配置入门:IP 显示、主机名修改与配置文件解析
  • 电动汽车转向系统及其工作原理
  • 8.c语言指针
  • Web开发系列-第0章 Web介绍
  • SQL注入SQLi-LABS 靶场less21-25详细通关攻略
  • Ubuntu普通用户环境异常问题
  • 数学建模——灰色关联分析
  • 三、构建一个Agent
  • OpenCv中的 KNN 算法实现手写数字的识别
  • 消息队列MQ常见问题和解决方案
  • Java面试全攻略:Spring生态与微服务架构实战
  • 新手开发 App,容易陷入哪些误区?
  • Android:Reverse 实战 part 2 番外 IDA python
  • SignalR 全解析:核心原理、适用场景与 Vue + .NET Core 实战
  • [电网备考]计算机组成与原理
  • Vue 四个map的使用方法
  • Mysql 二进制安装常见问题
  • 设备独立性软件-高速缓存与缓冲区