当前位置: 首页 > 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.dtcms.com/a/301485.html

相关文章:

  • [10月考试] B
  • 3.5-非关系型数据库-反规范化-sql语言
  • 市电有电检测电路
  • [硬件电路-96]:什么是闭环反馈?什么是闭环正反馈控制?什么是闭环负反馈控制?
  • RK3568 Linux驱动学习——Linux驱动开发准备工作
  • 企业IT管理——突发病毒事件应急处理预案模板
  • 永磁同步电机控制算法--弱磁控制(虚拟电阻)
  • 51c大模型~合集160
  • 重温经典,小巧方便的 WinXP 来啦!提供离线驱动
  • 【编号444】雅鲁藏布江(上中下)游8级水系湖泊数据合集
  • net8.0一键创建支持(RabbitMQ)
  • 神经网络知识讨论
  • 嵌入式硬件篇---驱动板
  • 【学习笔记】DexMimicGen:通过模仿学习实现双臂灵巧操作的自动化数据生成
  • 数据结构基础内容(第三篇:堆栈)
  • 深度解析 inaSpeechSegmenter:高效音频语音分割与检测开源工具
  • Epoll事件EPOLLRDHUP详解
  • springboot基于Java与MySQL库的健身俱乐部管理系统设计与实现
  • C51:使用超声波测量距离
  • C#.NET dapper 详解
  • MySQL 中的 BufferPool 和 ChangeBuffer
  • Amazon Relational Database Service (Amazon RDS)入门课
  • 量子力学的基本假设
  • 【Java】图书管理系统设计详解
  • 《 集成异步任务与定时调度:线程池与任务中心设计》
  • C++--继承
  • 设计模式(六)创建型:单例模式详解
  • VINS外参精确自标定飘的问题
  • 2025.7.22总结-幸福的力量
  • 模型评估的介绍