Qt 窗口事件机制

news2024/9/20 4:34:31

在 Qt 开发中,窗口的关闭、隐藏、显示等事件是常见且重要的功能。不同的事件触发条件、处理方式不同,了解和掌握这些事件有助于我们更好地控制窗口行为。本文将详细讲解这些事件的使用方法,并通过代码实例来展示其应用。

1. done(int r) — 关闭对话框并返回结果

描述: done(int)QDialog 的方法,关闭对话框并返回结果代码。

触发条件: 常用于关闭模态对话框,通过传递整数参数来标识结果状态。

代码示例:

void MyDialog::on_finishButton_clicked() {
    done(1);  // 关闭对话框,返回结果代码1(成功)
}

常用场景: 用于对话框操作完成后,返回成功或失败等结果代码。


2. closeEvent(QCloseEvent *event) — 窗口关闭事件

描述: 当窗口即将关闭时触发,可以选择接受或忽略关闭操作。

触发条件: 用户点击关闭按钮(“×”)或调用 close() 方法时触发。

代码示例:

void MainWindow::closeEvent(QCloseEvent *event) {
    if (maybeSave()) {
        event->accept();  // 确认保存后允许关闭窗口
    } else {
        event->ignore();  // 未保存则阻止关闭
    }
}

常用场景: 在用户尝试关闭窗口时检查是否有未保存的更改,弹出确认对话框。


3. hideEvent(QHideEvent *event) — 窗口隐藏事件

描述: 当窗口被隐藏时触发,用于在窗口隐藏时保存状态或暂停操作。

触发条件: 调用 hide() 方法或其他方式使窗口不可见时触发。

代码示例:

void MainWindow::hideEvent(QHideEvent *event) {
    qDebug() << "窗口已隐藏";
    // 在此执行暂停任务或保存状态的操作
}

常用场景: 当窗口被隐藏时,停止长时间运行的任务,或保存当前的工作状态。


4. showEvent(QShowEvent *event) — 窗口显示事件

描述: 窗口从隐藏状态转为可见时触发,用于恢复被暂停的操作或初始化界面。

触发条件: 调用 show() 或从隐藏状态变为可见时触发。

代码示例:

void MainWindow::showEvent(QShowEvent *event) {
    qDebug() << "窗口已显示";
    // 恢复被暂停的任务或重新加载数据
}

常用场景: 恢复窗口被隐藏时暂停的后台任务或重新加载内容。


5. moveEvent(QMoveEvent *event) — 窗口移动事件

描述: 当窗口位置改变时触发,通常用于跟踪窗口的位置。

触发条件: 窗口被用户拖动或通过代码改变位置时触发。

代码示例:

void MainWindow::moveEvent(QMoveEvent *event) {
    QPoint newPos = event->pos();  // 获取窗口的新位置
    qDebug() << "窗口移动到" << newPos;
}

常用场景: 在窗口移动时更新其他子窗口的位置或同步其他UI元素。


6. resizeEvent(QResizeEvent *event) — 窗口调整大小事件

描述: 当窗口大小发生变化时触发,通常用于调整内部控件布局。

触发条件: 窗口大小变化时触发,如通过用户手动调整或代码修改。

代码示例:

void MainWindow::resizeEvent(QResizeEvent *event) {
    QSize newSize = event->size();  // 获取窗口的新大小
    qDebug() << "窗口调整为大小" << newSize;
}

常用场景: 在窗口大小变化时调整控件的大小和布局,以适应新的窗口尺寸。


7. changeEvent(QEvent *event) — 窗口状态变化事件

描述: 窗口状态(如最小化、最大化、激活等)变化时触发。

触发条件: 窗口状态(最小化、最大化、激活等)发生变化时触发。

代码示例:

void MainWindow::changeEvent(QEvent *event) {
    if (event->type() == QEvent::WindowStateChange) {
        QWindowStateChangeEvent *stateEvent = static_cast<QWindowStateChangeEvent *>(event);
        if (stateEvent->oldState() & Qt::WindowMinimized) {
            // 窗口从最小化恢复时的操作
            qDebug() << "窗口从最小化状态恢复";
        }
    }
}

常用场景: 当窗口状态发生变化时,执行特定操作(如暂停/恢复任务)。


8. focusInEvent(QFocusEvent *event)focusOutEvent(QFocusEvent *event) — 窗口获得/失去焦点事件

描述: 当窗口获得或失去焦点时触发,通常用于更新窗口状态。

触发条件: 窗口获得或失去焦点时触发。

代码示例:

void MainWindow::focusInEvent(QFocusEvent *event) {
    qDebug() << "窗口获得焦点";
}

void MainWindow::focusOutEvent(QFocusEvent *event) {
    qDebug() << "窗口失去焦点";
}

常用场景: 在窗口失去焦点时暂停操作,或在获得焦点时恢复操作。


9. keyPressEvent(QKeyEvent *event)keyReleaseEvent(QKeyEvent *event) — 键盘事件

描述: 当用户按下或释放键盘按键时触发。

触发条件: 按下或释放某个键时触发。

代码示例:

void MainWindow::keyPressEvent(QKeyEvent *event) {
    if (event->key() == Qt::Key_Escape) {
        close();  // 按下Esc键关闭窗口
    }
}

常用场景: 处理键盘快捷键、游戏控制等场景。


10. enterEvent(QEvent *event)leaveEvent(QEvent *event) — 鼠标进入/离开事件

描述: 当鼠标进入或离开窗口区域时触发。

触发条件: 鼠标进入或离开窗口时触发。

代码示例:

void MainWindow::enterEvent(QEvent *event) {
    qDebug() << "鼠标进入窗口";
}

void MainWindow::leaveEvent(QEvent *event) {
    qDebug() << "鼠标离开窗口";
}

常用场景: 用于更新UI状态,如显示提示信息或更改控件样式。


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

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

相关文章

9.19总结

这几天学习了网络流 1&#xff0c;EK ek的主要思路是不断通过bfs找到增广路&#xff0c;找到增广路再建立反向边&#xff0c;直到不能再bfs到汇点&#xff0c;为什么可以通过建反向边呢&#xff1f;以上图举例&#xff0c;上图走完第一条增广路建立了一条反向边&#xff0c;当…

fps pve制作

1 导入素材 将人物模型和骨骼导入&#xff08;直接将fps拖进去&#xff0c;选择正确的骨骼即可&#xff09; 将枪支模型导入&#xff0c;取消创建骨骼&#xff0c;将静态网格体导入其中 2创建角色蓝图&#xff0c;也就是我们玩家控制的对象 然后在角色的组件中找到网格体并使…

几何 | 数学专项

日期内容2024.9.19创建 { d > 0 , 递增数列 d < 0 , 递减数列 d 0 &#xff0c;常数列 \begin{cases} d>0,递增数列\\ d<0,递减数列\\ d0&#xff0c;常数列 \end{cases} ⎩ ⎨ ⎧​d>0,递增数列d<0,递减数列d0&#xff0c;常数列​ 【2010.13】 【1.历年真…

【算法题】46. 全排列-力扣(LeetCode)

【算法题】46. 全排列-力扣(LeetCode) 1.题目 下方是力扣官方题目的地址 46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3…

漏件、丢件常发生?海外仓智能化管理来解决

随着海外仓业务的迅猛发展&#xff0c;一些仓库在日常运营中出现了出入库操作不规范、库存管理不够严格等问题。这些问题多数源于高度依赖人工操作及随意性较强的管理方式&#xff0c;导致了库存数据不准确、货物遗漏或丢失等情况的发生。长此以往&#xff0c;不仅会增加客户的…

让自动驾驶系统无限逼近人类?最新混合规划器实现高度安全的实车导航

导读&#xff1a; 本篇文章针对基于学习的规划器难以保证安全闭环驾驶这一问题&#xff0c;提出了一种新型的混合运动规划器&#xff0c;其结合了基于学习和基于优化的技术。通过仿真实验和实车实验&#xff0c;证明了本文规划器的有效性和鲁棒性。©️【深蓝AI】编译 1. 摘…

【已解决】Uncaught RangeError: Maximum depth reached

【已解决】Uncaught RangeError: Maximum depth reached 在JavaScript编程中&#xff0c;Uncaught RangeError: Maximum depth reached 是一个常见的错误&#xff0c;通常与递归调用深度过大有关。递归是一种编程技巧&#xff0c;它允许函数直接或间接地调用自身。然而&#xf…

2024年轻人驯化AI指南

或许Python编程是答案 我为您精心准备了一份全面的Python学习大礼包&#xff0c;完全免费分享给每一位渴望成长、希望突破自我现状却略感迷茫的朋友。无论您是编程新手还是希望深化技能的开发者&#xff0c;都欢迎加入我们的学习之旅&#xff0c;共同交流进步&#xff01; &…

OpenAI GPT o1技术报告阅读(2)- 关于模型安全性的测试案例

✨报告阅读&#xff1a;使用大模型来学习推理(Reason) 首先是原文链接&#xff1a;https://openai.com/index/learning-to-reason-with-llms/ 接下来我们看一个简单的关于模型安全性的测试&#xff0c;当模型被问到一个有风险的话题时&#xff0c;会如何思考并回答用户呢&…

saltstack入门

一、saltstack入门 一、saltstack介绍 1、saltstack简述 SaltStack 是一种基于 C/S 架构的服务器基础架构集中化管理平台&#xff0c;管理端称为 Master&#xff0c;客户端称为 Minion。SaltStack 具备配置管理、远程执行、监控等功能&#xff0c;一般可以理解为是简化版的 Pup…

安卓Settings值原理源码剖析存储最大的字符数量是多少?

背景&#xff1a; 平常做rom相关开发时候经常需要与settings值打交道&#xff0c;需要独立或者存储一个settings的场景&#xff0c;群里有个学员朋友就问了一个疑问&#xff0c;那就是Settings的putString方式来存储字符&#xff0c;那么可以存储的最大字符是多少呢&#xff1…

初始c++:入门基础(完结)

打字不易&#xff0c;留个赞再走吧~~~ 目录 一函数重载二引用1 引⽤的概念和定义2引⽤的特性3引⽤的使⽤三inline四nullptr 一函数重载 C⽀持在同⼀作⽤域中出现同名函数&#xff0c;但是要求这些同名函数的形参不同&#xff0c;可以是参数个数不同或者 类型不同。这样C函数调⽤…

【数据结构-差分】【hard】力扣995. K 连续位的最小翻转次数

给定一个二进制数组 nums 和一个整数 k 。 k位翻转 就是从 nums 中选择一个长度为 k 的 子数组 &#xff0c;同时把子数组中的每一个 0 都改成 1 &#xff0c;把子数组中的每一个 1 都改成 0 。 返回数组中不存在 0 所需的最小 k位翻转 次数。如果不可能&#xff0c;则返回 -…

代码随想录算法训练营43期 | Day 20 —— 235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

代码随想录算法训练营 代码随想录算法训练营43期235.二叉搜索树的最近公共祖先701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点 代码随想录算法训练营43期 235.二叉搜索树的最近公共祖先 解题思路&#xff1a; 二叉搜索树一定是有序的 判断条件&#xff1a; cur>p &…

解决phpstudy无法启动MySQL服务

三种方法 如果说你在小皮里面&#xff0c;启动mysql&#xff0c;发现启动不了&#xff0c;而且你在你自己电脑本地有装过mysql服务&#xff0c;那么可以按照我下面的不走来&#xff0c;按顺序试验1&#xff0c;2&#xff0c;3,三个里面肯定有一个是可以解决的 1.停止本地的mysq…

整整3W字笔记,Redis最核心的秒杀业务、分布式锁、消息队列相关原理一篇文章就搞定(黑马点评项目)

目录 四、 优惠卷秒杀系列功能实现 4.1 全局ID生成器 4.1.1 全局ID生成器的选型 4.1.2 全局ID生成器的实现 4.1.3 全局ID生成器的测试 4.1.4 其他ID生成器的拓展 4.2 利用PostMan模拟管理员后台添加秒杀优惠卷信息 【代码实现】 【PostMan测试】 4.3 优惠卷秒杀下单功能…

Jenkins 构建后操作(Send build artifacts over SSH)

Jenkins 构建后操作(Send build artifacts over SSH) 针对Jenkins部署项目的注意事项 配置Send build artifacts over SSH SSH Server,这是一个系统配置 配置地址&#xff1a;系统管理 -> 系统配置 ->SSH Server 注意1&#xff1a;记得点一下高级里面有一个密码配置&…

10 vue3之全局组件,局部组件,递归组件,动态组件

全局组件 使用频率非常高的组件可以搞成全局组件&#xff0c;无需再组件中再次import引入 在main.ts 注册 import Card from ./components/Card/index.vuecreateApp(App).component(Card,Card).mount(#app) 使用方法 直接在其他vue页面 立即使用即可 无需引入 <templat…

240919-Pip先在线下载不安装+再离线安装

A. 最终效果 # 使用modelscope sdk下载模型 import os os.environ[MODELSCOPE_CACHE] 您希望的下载路径from modelscope import snapshot_download model_dir snapshot_download(opendatalab/PDF-Extract-Kit) print(f"模型文件下载路径为&#xff1a;{model_dir}/model…

【新手上路】衡石分析平台使用手册-认证方式

认证方式​ 用户登录衡石系统时&#xff0c;系统需要对输入的用户名和密码进行验证&#xff0c;保证系统的安全。衡石提供 CAS、SAML2、OAUTH2等多种单点登录认证方式。在 SSO 单点登录中&#xff0c;衡石是服务提供者 SP&#xff08;Service Provider&#xff09;为用户提供所…