QT:如何在程序密集响应时,界面不会卡住?

news2024/11/25 6:38:50

前因:
当调用QApplication::exec()时,就启动了QT的事件循环。在开始的时候QT会发出一些事件命令来显示和绘制窗口部件。

在这之后,事件循环就开始运行,它不断检查是否有事件发生并且把这些事件发生给应用程序的QObject。

当处理一个事件时,也可能同时产生一些其他的事件并且将其追加到QT的事件队列中。如果在处理一个特定事件上耗费的事件过多,那么用户界面将变得无法响应。例如,在应用程序把一个文件保存到磁盘的过程中,直到文件保存完毕,才会处理那些由窗口系统产生的事件;在文件保存的过程中,应用程序就不能响应来自窗口系统重新绘制的请求。

起因:如果处理一个特定任务上耗费的时间过多时,那么用户界面就会变得无法响应。
问题:怎么保持在程序密集响应时,界面不会卡住?

在此种情况下的解决方案:
一、利用processEvents()函数
在代码中频繁调用该函数即可QApplication::processEvents()。这个函数告诉QT处理所有那些还没有被处理的各类事件,然后将控制权返回给调用者。 实际上,QApplication::processEvents()就是一个不停调用processEvent()函数的while循环。

示例:

void test::writeFile(const QString &sFileName)
{
    QFile f(sFileName);
    ……
    for(int i=0;i<size;i++)
    {
        代码
        qApp->processEvent();
    }
}
使用这个方法的时候存在一个潜在的问题:应用程序还在执行的时候,就关闭了主窗口或者点击了其他响应,会产生预料不到的后果。解决方案:替换成QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); 以告诉QT忽略鼠标事件和键盘事件。

 补充:QMetaObject::invokeMethod()使用解决界面卡住问题

例如:

二、使用多线程(QT开启多线程有3种方式)
一个线程用于处理应用程序中的用户界面,另一个线程则执行文件保存操作(或任意其他耗时的操作),这样的话,在保存文件的时候,应用程序的用户界面仍可以保持响应。

原文链接:https://blog.csdn.net/ligare/article/details/124498542

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

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

相关文章

HarmonyOS 应用开发之FA模型绑定Stage模型ServiceExtensionAbility

本文介绍FA模型的三种应用组件如何绑定Stage模型的ServiceExtensionAbility组件。 PageAbility关联访问ServiceExtensionAbility PageAbility关联访问ServiceExtensionAbility和PageAbility关联访问ServiceAbility的方式完全相同。 import featureAbility from ohos.ability…

Git 核心知识

2024年3月30日 Git 安装 官网下载&#xff0c;Git 选择合适的版本&#xff0c;无脑下一步即可。 安装成功之后&#xff0c;鼠标右键任意的文件夹&#xff0c;会出现 Git GUI 的选项&#xff0c;即安装成功 安装注意事项 安装前&#xff0c;检查环境变量 &#xff0c; 如果…

自定义SpringSecurity异常格式

今天发现spring的异常格式没有跟着mvc的错误格式走&#xff0c;场景是用户权限的时候。查了一下原来是springsecurity定义了一组filter作用在了mvc上层&#xff0c;因此需要处理一下错误格式。 处理前错误返回信息如下&#xff1a; 由于使用了多语言&#xff0c;因此错误格式也…

设计模式9--单例模式

定义 案例一 案例二 优缺点

8LS Three-phase Synchronous 电机Motors MAMOT2-ENG 安装调试接线等说明 146页

8LS Three-phase Synchronous 电机Motors MAMOT2-ENG 安装调试接线等说明 146页

4月1日起,未备案App小程序将下架

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 最后2天了、最后2天了。 从2024年4月1日起&#xff0c;工信部要求所有的APP、小程序都要备案&#xff0c;否则下架、关停、限制更新。这是去年8月份出的新规&#xff0c;没想到十个月这么快就过去了。 现在广东省…

JDK和IntelliJ IDEA下载和安装及环境配置教程

一、JDK下载&#xff08;点击下方官网链接&#xff09; Java Downloads | Oracle 选择对应自己电脑系统往下拉找到自己想要下载的JDK版本进行下载&#xff0c;我下的是jdk 11&#xff0c;JDK有安装版和解压版&#xff0c;我就直接下安装版的了。 .exe和.zip的区别&#xff1a…

链表(下)

0.上篇引入&#xff1a; 顺序表存在一些问题 1.顺序在插入的数据的时候数据需要进行移动势必会降低效率 2. 扩容存在性能的消耗 3.扩容会存在内存的浪费 所以引入了链表这种更好用的数据存储&#xff08;由独立的节点组成&#xff09; 1. 头删 2.查找 3.1指定位置之前插入…

sqli第24关二次注入

注入点 # Validating the user input........$username $_SESSION["username"];$curr_pass mysql_real_escape_string($_POST[current_password]);$pass mysql_real_escape_string($_POST[password]);$re_pass mysql_real_escape_string($_POST[re_password]);if($p…

Adaboost集成学习 | Matlab实现基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测) 单变量时间序列单步预测。 ELM(Extreme Learning Machine,极限学习机)和AdaBoost(Adaptive Boosting,自适应提升)都是机…

文件和文件操作(C语言)

1.什么是文件&#xff1f; 磁盘或者是说硬盘上的文件就是文件。在程序设计中&#xff0c;我们⼀般谈的文件有两种&#xff1a;程序文件、数据文件。 2.文件名 ⼀个文件要有⼀个唯⼀的文件标识&#xff0c;以便识别和引用。 例如&#xff1a; c:\ files\ test.txt 3. ⼆进制…

搜索与图论——Kruskal算法求最小生成树

kruskal算法相比prim算法思路简单&#xff0c;不用处理边界问题&#xff0c;不用堆优化&#xff0c;所以一般稀疏图都用Kruskal。 Kruskal算法时间复杂度O(mlogm) 每条边存结构体里&#xff0c;排序需要在结构体里重载小于号 判断a&#xff0c;b点是否连通以及将点假如集合中…

【教程】最新可用! Python实现QQ扫码登录的群验证

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 目录 背景说明 使用效果 参考代码 扫码登录(备份) 背景说明 Q群验证就是为了验证某个用户是否加入了指定的群聊。这可以有很多作用,比如限制软件的使用人群,以防滥用。 使用效果 参考代码 from PyQt5.QtCore import …

PinkysPalaceV2靶场详解IDA逆向查看缓存区溢出漏洞原理以及使用kali gdb使用超详细三次提权字典生成

下载链接: Pinkys Palace: v2 ~ VulnHub 安装&#xff1a; 正常用vm虚拟机打开即可&#xff0c;注意导入时所选择的硬盘存储目录应为空目录&#xff0c;否则会导入失败 根据下载链接提示我们需要更改host文件&#xff0c;以便于我们可以正常访问 kali中的host文件位置为 /etc/h…

Linux中常用命令(文件、目录和文件压缩)及功能示例

一、Linux关于文件与目录的常用命令及其功能示例 命令: ls 全名: List (列表) 常用选项: -l: 详细列表格式&#xff0c;显示详细信息。-a: 显示所有文件&#xff0c;包括隐藏文件。 功能: 列出目录内容。 示例: ls -la /home 此命令以详细格式列出/home目录中的所有文件&#x…

css3之2D转换transform

2D转换transform 一.移动&#xff08;translate)(中间用&#xff0c;隔开&#xff09;二.旋转&#xff08;rotate)&#xff08;有单位deg)1.概念2.注意点3.转换中心点&#xff08;transform-origin)&#xff08;中间用空格&#xff09;4.一些例子(css三角和旋转&#xff09; 三…

VAE——生成数字(Pytorch+mnist)

1、简介 VAE&#xff08;变分自编码器&#xff09;同样由编码器和解码器组成&#xff0c;但与AE不同的是&#xff0c;VAE通过引入隐变量并利用概率分布来学习潜在表示。VAE的编码器学习将输入数据映射到潜在空间的概率分布的参数&#xff0c;而不是直接映射到确定性的潜在表示…

Astro 宣布:将超过 500 多个测试从 Mocha 迁移到了 Node.js

近期&#xff0c;Astro 在其官方博客中宣布&#xff0c;虽然我们对 Mocha 感到满意&#xff0c;但也在寻求让我们的 CI 作业更快的方法。最终将超过 500 多个测试从 Mocha 迁移到了 Node.js。 先了解下 Astro 是什么&#xff1f;Astro 是适合构建像博客、营销网站、电子商务网站…

2_1.Linux中的网络配置

#1.什么是IP ADDRESS# internet protocol ADDRESS ##网络进程地址 ipv4 internet protocol version 4 ip是由32个01组成 11111110.11111110.11111110.11111110 254.254.254.254 #2.子网掩码# 用来划分网络区域 子网掩码非0的位对应的ip上的数字表示这个ip的网络位 子网掩码0位…

TC16-161T+ 音频 信号变压器 RF Transformers 600kHz-160MHz 射频集成电路 Mini-Circuits

Mini-Circuits是一家全球领先的射频、微波和毫米波元器件及子系统制造商。TC16-161T是Mini-Circuits出产的一款射频IC&#xff08;射频集成电路&#xff09;&#xff0c;具有平衡-不平衡转换器功用。制造商: Mini-Circuits 产品品种: 音频变压器/信号变压器 RoHS…