Qt MDI与Splash介绍

目录

QMdiSubWindow

子窗口处理

API

QMdiArea

API

QSplashScreen


QMdiSubWindow

QMdiSubWindow 表示 QMdiArea 中的顶层窗口,由带有窗口装饰的标题栏、内部小部件以及(取决于当前样式)窗口框架和大小控制柄组成。QMdiSubWindow 有自己的布局,由标题栏和内部小部件的中心区域组成。

构造 QMdiSubWindow 的最常见方法是调用 QMdiArea::addSubWindow(),并将内部小部件作为参数。您还可以自己创建子窗口,并通过调用 setWidget() 设置内部小部件。使用子窗口编程时,您可以使用与常规顶层窗口相同的 API(例如,您可以调用 show()、hide()、showMaximized() 和 setWindowTitle() 等函数)。

子窗口处理

QMdiSubWindow 还支持特定于 MDI 区域中子窗口的行为。默认情况下,每个 QMdiSubWindow 在移动时在 MDI 区域视口内可见,但也可以指定透明窗口移动和调整大小行为,在这些操作期间仅更新子窗口的轮廓。setOption() 函数用于启用此行为。isShaded() 函数检测子窗口当前是否处于阴影状态(即,窗口折叠,因此只有标题栏可见)。要进入阴影模式,请调用 showShaded()。每当窗口状态发生变化时(例如,当窗口最小化或恢复时),QMdiSubWindow 都会发出 windowStateChanged() 信号。它还会在激活之前发出 aboutToActivate()。

在键盘交互模式下,窗口使用键盘移动和调整大小。您可以通过窗口的系统菜单进入此模式。 keyboardSingleStep 和 keyboardPageStep 属性控制小部件在每次按键事件中移动或调整大小的距离。按下 shift 时,使用向下翻页步进;否则使用单步。您还可以使用键盘更改活动窗口。通过同时按下 control 和 tab 键,将激活下一个(使用当前 WindowOrder)子窗口。通过按下 control、shift 和 tab,您将激活上一个窗口。这相当于调用 activateNextSubWindow() 和 activatePreviousSubWindow()。请注意,这些快捷键会覆盖全局快捷键,但不会覆盖 QMdiAreas 快捷键。

API

分类成员/方法说明
Public Typesenum SubWindowOption { RubberBandResize, RubberBandMove }枚举类型,定义了窗口的选项:可调整大小或可移动。
flags SubWindowOptions用于标记选项的标志类型。
PropertieskeyboardPageStep : int定义页面滚动步长。
keyboardSingleStep : int定义单步滚动步长。
Public FunctionsQMdiSubWindow(QWidget *parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags())构造函数,初始化一个 QMdiSubWindow 实例。
virtual ~QMdiSubWindow()析构函数,销毁 QMdiSubWindow 实例。
bool isShaded() const返回窗口是否已被遮蔽(最小化)状态。
int keyboardPageStep() const获取页面滚动步长的值。
int keyboardSingleStep() const获取单步滚动步长的值。
QMdiArea *mdiArea() const获取关联的 QMdiArea 对象。
void setKeyboardPageStep(int step)设置页面滚动步长的值。
void setKeyboardSingleStep(int step)设置单步滚动步长的值。
void setOption(QMdiSubWindow::SubWindowOption option, bool on = true)设置窗口选项。
void setSystemMenu(QMenu *systemMenu)设置窗口的系统菜单。
void setWidget(QWidget *widget)设置窗口中显示的小部件。
QMenu *systemMenu() const获取系统菜单。
bool testOption(QMdiSubWindow::SubWindowOption option) const测试窗口选项是否被启用。
QWidget *widget() const获取窗口中显示的小部件。
Reimplemented Public Functionsvirtual QSize minimumSizeHint() const override重写,返回窗口的最小尺寸建议值。
virtual QSize sizeHint() const override重写,返回窗口的尺寸建议值。
Public Slotsvoid showShaded()显示遮蔽状态(最小化窗口)。
void showSystemMenu()显示系统菜单。
Signalsvoid aboutToActivate()信号:窗口即将激活。
void windowStateChanged(Qt::WindowStates oldState, Qt::WindowStates newState)信号:窗口状态变化。
Reimplemented Protected Functionsvirtual 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重写,处理定时器事件。

QMdiArea

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()。两者都是插槽,可轻松连接到菜单项。

API

类别成员/函数说明
Public Typesenum AreaOption { DontMaximizeSubWindowOnActivation }枚举类型,定义区域选项:激活子窗口时不最大化。
flags AreaOptions区域选项的标志类型。
enum ViewMode { SubWindowView, TabbedView }视图模式的枚举类型:子窗口视图或标签视图。
enum WindowOrder { CreationOrder, StackingOrder, ActivationHistoryOrder }窗口顺序的枚举类型:创建顺序、堆叠顺序或激活历史顺序。
PropertiesactivationOrder : WindowOrder获取或设置窗口的激活顺序。
background : QBrush获取或设置背景刷子。
documentMode : bool获取或设置是否启用文档模式。
tabPosition : QTabWidget::TabPosition获取或设置标签的位置。
tabShape : QTabWidget::TabShape获取或设置标签的形状。
tabsClosable : bool获取或设置标签是否可关闭。
tabsMovable : bool获取或设置标签是否可移动。
viewMode : ViewMode获取或设置视图模式。
Public FunctionsQMdiArea(QWidget *parent = nullptr)构造函数,初始化 QMdiArea 实例。
virtual ~QMdiArea()析构函数,销毁 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获取视图模式。
Reimplemented Public Functionsvirtual QSize minimumSizeHint() const override重写,返回最小尺寸提示。
virtual QSize sizeHint() const override重写,返回建议的尺寸。
Public Slotsvoid activateNextSubWindow()激活下一个子窗口。
void activatePreviousSubWindow()激活上一个子窗口。
void cascadeSubWindows()子窗口层叠显示。
void closeActiveSubWindow()关闭当前激活的子窗口。
void closeAllSubWindows()关闭所有子窗口。
void setActiveSubWindow(QMdiSubWindow *window)设置指定的子窗口为当前激活窗口。
void tileSubWindows()子窗口平铺显示。
Signalsvoid subWindowActivated(QMdiSubWindow *window)信号:当某个子窗口被激活时发出。
Reimplemented Protected Functionsvirtual 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重写,处理视口事件。
Protected Slotsvirtual void setupViewport(QWidget *viewport) override重写,设置视口。

QSplashScreen

启动画面是通常在应用程序启动时显示的小部件。启动画面通常用于启动时间较长的应用程序(例如需要时间建立连接的数据库或网络应用程序),以向用户提供应用程序正在加载的反馈。

启动画面出现在屏幕中央。如果您想让启动画面小部件保持在桌面上所有其他窗口之上,将 Qt::WindowStaysOnTopHint 添加到启动画面小部件的窗口标志可能会很有用。

某些 X11 窗口管理器不支持“保持在最上面”标志。解决方案是设置一个计时器,定期在启动画面上调用 raise() 来模拟“保持在最上面”效果。

最常见的用法是在屏幕上显示主小部件之前显示启动画面。以下代码片段说明了这一点,其中显示了启动画面,并在显示应用程序的主窗口之前执行了一些初始化任务:

int main(int argc, char *argv[])
{QApplication app(argc, argv);QPixmap pixmap(":/splash.png");QSplashScreen splash(pixmap);splash.show();app.processEvents();...QMainWindow window;window.show();splash.finish(&window);return app.exec();
}

用户可以通过使用鼠标单击来隐藏启动画面。要使鼠标处理正常工作,请在启动期间定期调用 QApplication::processEvents()。

有时使用消息更新启动画面很有用,例如,在应用程序启动时宣布已建立连接或已加载模块:

QPixmap pixmap(":/splash.png");
QSplashScreen *splash = new QSplashScreen(pixmap);
splash->show();
... // 加载一些项目
splash->showMessage("Loaded modules");
QCoreApplication::processEvents();
... // 建立连接
splash->showMessage("Established connections");
QCoreApplication::processEvents();

QSplashScreen 通过 showMessage() 函数支持此功能。如果您希望自己进行绘制,可以使用 pixmap() 获取启动画面中使用的像素图的指针。或者,您可以子类化 QSplashScreen 并重新实现 drawContents()。

如果有多个屏幕,也可以在主屏幕以外的其他屏幕上显示启动画面。例如:

QScreen *screen = QGuiApplication::screens().at(1);
QPixmap pixmap(":/splash.png");
QSplashScreen splash(screen,pixmap);
splash.show();
类别成员/函数说明
Public FunctionsQSplashScreen(const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())构造函数,使用指定的图片和窗口标志初始化。
QSplashScreen(QScreen *screen, const QPixmap &pixmap = QPixmap(), Qt::WindowFlags f = Qt::WindowFlags())构造函数,使用指定的屏幕、图片和窗口标志初始化。
virtual ~QSplashScreen()析构函数,销毁 QSplashScreen 实例。
void finish(QWidget *mainWin)显示完成,通常在主窗口显示时调用。
QString message() const获取当前显示的消息文本。
const QPixmap pixmap() const获取当前显示的图片。
void repaint()重新绘制 splash 屏幕。
void setPixmap(const QPixmap &pixmap)设置要显示的图片。
Public Slotsvoid clearMessage()清除当前显示的消息。
void showMessage(const QString &message, int alignment = Qt::AlignLeft, const QColor &color = Qt::black)显示指定的消息文本,并设置对齐方式和颜色。
Signalsvoid messageChanged(const QString &message)信号:当显示的消息内容发生变化时发出。
Protected Functionsvirtual void drawContents(QPainter *painter)重写,绘制 splash 屏幕内容。
Reimplemented Protected Functionsvirtual bool event(QEvent *e) override重写,处理事件。
virtual void mousePressEvent(QMouseEvent *) override重写,处理鼠标按下事件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/20135.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

《深入理解 Spring MVC 工作流程》

一、Spring MVC 架构概述 Spring MVC 是一个基于 Java 的轻量级 Web 应用框架&#xff0c;它遵循了经典的 MVC&#xff08;Model-View-Controller&#xff09;设计模式&#xff0c;将请求、响应和业务逻辑分离&#xff0c;从而构建出灵活可维护的 Web 应用程序。 在 Spring MV…

基于Java Springboot宿舍管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

LeetCode螺旋矩阵

快一个月没刷题了&#xff0c;最近工作有些忙&#xff0c;今天闲下来两小时&#xff0c;刷一道 题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4…

探索CompletableFuture:高效异步编程的利器

目录 一、CompletableFuture基本功能安利 二、CompletableFuture使用介绍 &#xff08;一&#xff09;任务创建使用 1.supplyAsync创建带有返回值的异步任务 2.runAsync创建没有返回值的异步任务 &#xff08;二&#xff09;异步回调使用 1.异步回调&#xff1a;thenApp…

java的强,软,弱,虚引用介绍以及应用

写在前面 本文看下Java的强&#xff0c;软&#xff0c;弱&#xff0c;虚引用相关内容。 1&#xff1a;各种引用介绍 顶层类是java.lang.ref.Reference,注意是一个抽象类&#xff0c;而不是接口&#xff0c;其中比较重要的引用队列ReferenceQueue就在该类中定义&#xff0c;子…

基于STM32的智能垃圾分类投递系统设计

目录 引言系统需求与设计目标硬件设计 3.1 核心控制模块 3.2 传感器模块 3.3 驱动模块 3.4 显示模块 3.5 通信模块软件设计 4.1 数据采集与处理 4.2 垃圾分类逻辑实现 4.3 状态显示与远程监控代码实现 5.1 数据采集与处理 5.2 分类逻辑与控制 5.3 状态显示与通信 5.4 主程序实…

手摸手6-创建前端应用

目录 手摸手6-创建前端应用简介命令 npm create vue 和 npm init vue3的区别 使用 Create-Vue 创建应用1、输入命令 npm create vue 创建应用2、输入命令 npm install 安装相关依赖3、输入命令 npm run dev 运行项目 项目结构 手摸手6-创建前端应用 简介 create-vue 是 vue 应…

第T8周:Tensorflow实现猫狗识别(1)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: PyCharm 框 架: &#xff08;二&#xff09;具体步骤 from absl.l…

【MySQL】数据库基础

1.数据库基本认识 广义上来说数据库是长期存储在磁盘上的数据文件的集合&#xff0c;而MySQL是采用了C/S模式实现的一个网络服务&#xff0c;它由MySQL&#xff08;数据库客户端&#xff09; 、MySQLD &#xff08;数据库服务&#xff09;、磁盘上的数据库文件组成。MySQL服务是…

AWS IAM

一、介绍 1、简介 AWS Identity and Access Management (IAM) 是 Amazon Web Services 提供的一项服务&#xff0c;用于管理 AWS 资源的访问权限。通过 IAM&#xff0c;可以安全地控制用户、组和角色对 AWS 服务和资源的访问权限。IAM 是 AWS 安全模型的核心组成部分&#xf…

windows C#-异步编程场景(二)

等待多个任务完成 你可能发现自己处于需要并行检索多个数据部分的情况。 Task API 包含两种方法(即 Task.WhenAll 和 Task.WhenAny)&#xff0c;这些方法允许你编写在多个后台作业中执行非阻止等待的异步代码。 此示例演示如何为一组 User 捕捉 userId 数据。 private stati…

web——sqliabs靶场——第九关——时间盲注

什么是时间盲注 时间盲注是指基于时间的盲注&#xff0c;也叫延时注入&#xff0c;根据页面的响应时间来判断是否存在注入。 使用sqlmap不同的技术 sqlmap --technique 参数用来设置具体SQL注入技术 B: Boolean-based blind 基于布尔的忙逐步 E:Error-based 报错注入 U&am…

Vue所有图片预加载加上Token请求头信息、图片请求加载鉴权

环境 Vue2、“axios”: “0.18.1”、webpack&#xff1a;“4.46.0”、ant-design-vue: “1.7.8” 描述 项目对安全要求比较高&#xff0c;所有后台返回的图片加载时都要加上token。比如资源图片&#xff0c;拍照打卡的图片&#xff0c;都需要鉴权。如果不带上token参数&…

此电脑中的百度网盘图标无法删除解决方法2024/11/18

教程很详细&#xff0c;直接上步骤 对于这种情况&#xff0c;修改注册表是很麻烦的&#xff0c;眨眼睛在这里推荐这位大佬的开源软件MyComputerManager 点击跳转MyComputerManager下载链接

【模型级联】YOLO-World与SAM2通过文本实现指定目标的零样本分割

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

Postman之变量操作

系列文章目录 Postman之变量操作 1.pm.globals全局变量2.pm.environment环境变量3.pm.collectionVariables集合变量4.pm.variables5.提取数据-设置变量-进行参数化串联使用 postman中分为全局变量、环境变量、集合变量、和普通变量 分别使用pm.globals、pm.environment、pm.co…

linux 常用命令指南(存储分区、存储挂载、docker迁移)

前言&#xff1a;由于目前机器存储空间不够&#xff0c;所以‘斥巨资’加了一块2T的机械硬盘&#xff0c;下面是对linux扩容的一系列操作&#xff0c;包含了磁盘空间的创建、删除&#xff1b;存储挂载&#xff1b;docker迁移&#xff1b;anaconda3迁移等。 一、存储分区 1.1 …

python读取Oracle库并生成API返回Json格式

一、安装必要的库 首先&#xff0c;确保已经安装了以下库&#xff1a; 有网模式 pip install flask pip install gevent pi install cx_Oracle离线模式&#xff1a; 下载地址&#xff1a;https://pypi.org/simple/flask/ # a. Flask Werkzeug-1.0.1-py2.py3-none-any.whl J…

Nature子刊 | 单细胞测序打开发育系统溯源新视角

神经系统是人体最为复杂且最为重要的器官之一。深入理解神经发育对于神经科学研究和再生医学具有举足轻重的作用。但神经元多样性的起源仍是一个亟待解决的难题。日益发展的单细胞测序技术让研究人员们有机会从细胞的异质性入手&#xff0c;对不同细胞类型之间的关联和分化路径…

5G CPE与4G CPE的主要区别有哪些

什么是CPE&#xff1f; CPE是Customer Premise Equipment&#xff08;客户前置设备&#xff09;的缩写&#xff0c;也可称为Customer-side Equipment、End-user Equipment或On-premises Equipment。CPE通常指的是位于用户或客户处的网络设备或终端设备&#xff0c;用于连接用户…