1.界面+代码 

//按钮1
void Dialog::on_pushButton1_clicked()
{qDebug("pushButton1 clicked start");enableBtns(false);//禁用按钮qDebug("pushButton1 do sth start");QThread::sleep(5);//休眠,作为同步处理业务qDebug("pushButton1 do sth end");enableBtns(true);//启用按钮qDebug("pushButton1 clicked end");
}
//按钮2
void Dialog::on_pushButton2_clicked()
{qDebug("pushButton2 clicked start");enableBtns(false);//singleShot 延后处理业务。时间0ms不行QTimer::singleShot(1,this,[this](){qDebug("pushButton2 do sth start");QThread::sleep(5);qDebug("pushButton2 do sth end");enableBtns(true);});qDebug("pushButton2 clicked end");
}
//按钮3
void Dialog::on_pushButton3_clicked()
{qDebug("pushButton3 clicked start");enableBtns(false);//singleShot 延后处理业务。时间0ms不行QTimer::singleShot(1,this,[this](){qDebug("pushButton3 do sth start");QThread::sleep(5);qDebug("pushButton3 do sth end");//singleShot 延后启用按钮。时间 0或1不行,建议为5或10以上QTimer::singleShot(5,this,[this](){enableBtns(true);});});qDebug("pushButton3 clicked end");
}
//按钮其他
void Dialog::on_pushButtonOther_clicked()
{qDebug("pushButtonOther clicked");
}
//按钮禁用状态设置
void Dialog::enableBtns(bool enable)
{qDebug(enable?"enableBtns":"disableBtns");ui->pushButton1->setEnabled(enable);ui->pushButton2->setEnabled(enable);ui->pushButton3->setEnabled(enable);ui->pushButtonOther->setEnabled(enable);
}

2.测试

2.1点击 “按钮1”,然后立即点击“按钮其他”。按钮没变成禁用状态,“按钮其他”触发。

pushButton1 clicked start
disableBtns
pushButton1 do sth start
pushButton1 do sth end
enableBtns
pushButton1 clicked end
pushButtonOther clicked
pushButtonOther clicked

2.2点击 “按钮2”,按钮变成禁用状态,然后点击“按钮其他”,“按钮其他”仍触发。

pushButton2 clicked start
disableBtns
pushButton2 clicked end
pushButton2 do sth start
pushButton2 do sth end
enableBtns
pushButtonOther clicked
pushButtonOther clicked

2.2点击 “按钮3”,按钮变成禁用状态,然后点击“按钮其他”,“按钮其他”未触发。

pushButton3 clicked start
disableBtns
pushButton3 clicked end
pushButton3 do sth start
pushButton3 do sth end
enableBtns

3.原因分析

        Qt的界面刷新、按钮或QTimer::singleShot的业务处理都是放在主线程处理的。

        主线程处理按钮业务时,不会处理其他业务,界面也不会刷新。此时如果有其他事件,会将其他事件放在义务处理完。

        业务处理前禁用按钮,业务处理中就不会刷新界面样式;如果业务中点击过按钮,当业务处理完后有立即启用按钮,Qt框架会处理点击事件,判断按钮已经可用了,就会再次调用点击业务。

        QTimer::singleShot 可以将业务延后处理,使界面样式刷新,业务处理,点击事件判断 按预定顺序处理。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟专用网技术

一、需求背景物理联通:实现不同物理位置网络的连接基础。网络联通:在物理连接基础上,实现数据等信息的传输互通。二、虚拟专用网简介定义虚拟私有网络是依靠互联网服务提供商(ISP)或其他网络服务提供商(NSP…

GANs生成对抗网络生成手写数字的Pytorch实现

目录 一、第三方库导入 二、数据集准备 三、使用转置卷积的生成器 四、使用卷积的判别器 五、生成器生成图像 六、主程序 七、运行结果 7.1 生成器和判别器的损失函数图像 7.2 训练过程中生成器生成的图像 八、完整的pytorch代码 由于之前写gans的代码时,…

ubuntu 通过NAT模式上网

这里必须使用VMnet8 设置为NAT模式 下面设置Ip地址区域ubuntu ip地址设置来自于上面

盲盒抽谷机小程序系统开发:从0到1的完整方法论

开发一款成功的盲盒抽谷机小程序系统,需兼顾技术实现、用户体验与商业逻辑。本文将从需求分析、UI/UX设计、技术架构、测试上线到运营增长,系统梳理从0到1的完整方法论。需求分析:明确“为谁而做”盲盒抽谷机的核心用户是18-35岁的二次元爱好…

web开发,在线%射击比赛管理%系统开发demo,基于html,css,jquery,python,django,三层mysql数据库

经验心得 两业务单,业务crud开发很简单了,自行学习,我说一下学习流程。什么是前端,用到那些技术html,css,javascript分别是什么?进阶jquery,bootstrap,各种常见前端组件又是什么,前端框架react,angular以及…

Centos9傻瓜式linux部署CRMEB 开源商城系统(PHP)

服务器环境推荐要求* Nignx(必须) * PHP 7.1 ~ 7.4(必须此版本内,版本过大会警告不兼容) * MySQL 5.7 ~ 8.0(必须) * Redis(非必须)后台页面展示:…

AI 云电竞游戏盒子:从“盒子”到“云-端-芯”一体化竞技平台的架构实践

摘要 AI 云电竞游戏盒子(以下简称“电竞盒”)不再是一台简单的客厅游戏主机,而是一套以 AI 调度为核心、以云原生架构为骨架、以边缘渲染为肌肉、以端侧感知为神经的“云-端-芯”协同竞技系统。本文基于 2024 年 Q2 落地的量产方案&#xff0…

基于kuboard实现kubernetes的集群管理

1、前提条件安装docker-compose2、步骤在本地目录创建kuboard-v4\在该目录下创建文件docker-compose.yaml,内容如下:configs:create_db_sql:content: |CREATE DATABASE kuboard DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;cre…

Linux操作系统软件编程——多线程

什么是线程线程的定义是轻量级的进程,可以实现多任务的并发。线程是操作系统任务调度的最小单位线程的创建由某个进程创建,且进程创建线程时,会为其分配独立的栈区空间(默认8M)。线程和所在的进程,以及进程…

linux下找到指定目录下最新日期log文件

以下是一个完整的C函数&#xff0c;用于在指定目录下自动查找最近更新的日志文件&#xff08;根据文件名中的时间戳选择最新的文件&#xff09;&#xff1a;#include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> #include…

《数学模型》经典案例——钢管的订购与运输

一、问题描述 要铺设一条 A1→A2→⋯→A15A_1 \rightarrow A_2 \rightarrow \cdots \rightarrow A_{15}A1​→A2​→⋯→A15​ 的输送天然气的主管道&#xff0c;如图 6.22 所示。经筛选后可以生产这种主管道钢管的钢厂有 S1,S2,⋯,S7S_1, S_2, \cdots, S_7S1​,S2​,⋯,S7​ 。…

Java Web部署

今天小编来分享下如何将本地写的Java Web程序部署到Linux上。 小编介绍两种方式&#xff1a; 部署基于Linux Systemd服务、基于Docker容器化部署 首先部署基于Linux Systemd服务 那么部署之前&#xff0c;要对下载所需的环境 软件下载 Linux&#xff08;以ubuntu&#xf…

告别AI“炼丹术”:“策略悬崖”理论如何为大模型对齐指明科学路径

摘要&#xff1a;当前&#xff0c;我们训练大模型的方式&#xff0c;尤其是RLHF&#xff0c;充满了不确定性&#xff0c;时常产生“谄媚”、“欺骗”等怪异行为&#xff0c;被戏称为“炼丹”。一篇来自上海AI Lab的重磅论文提出的“策略悬崖”理论&#xff0c;首次为这个混沌的…

深入理解C#特性:从应用到自定义

——解锁元数据标记的高级玩法&#x1f4a1; 核心认知&#xff1a;特性本质揭秘 public sealed class ReviewCommentAttribute : System.Attribute { ... }特性即特殊类&#xff1a;所有自定义特性必须继承 System.Attribute&#xff08;基础规则&#xff09;命名规范&#xff…

机器学习-集成学习(EnsembleLearning)

0 结果展示 0.1 鸢尾花分类 import pandas as pd import numpy as npfrom sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, recall_score, f1_score, classification_repo…

Golang database/sql 包深度解析(一)

database/sql 是 Go 语言标准库中用于与 SQL&#xff08;或类 SQL&#xff09;数据库交互的核心包&#xff0c;提供了一套轻量级、通用的接口&#xff0c;使得开发者可以用统一的方式操作各种不同的数据库&#xff0c;而无需关心底层数据库驱动的具体实现。 核心设计理念 datab…

文章自然润色 API 数据接口

文章自然润色 API 数据接口 ai / 文本处理 基于 AI 的文章润色 专有模型 / 智能纠错。 1. 产品功能 基于自有专业模型进行 AI 智能润色对原始内容进行智能纠错高效的文本润色性能全接口支持 HTTPS&#xff08;TLS v1.0 / v1.1 / v1.2 / v1.3&#xff09;&#xff1b;全面兼容…

【状压DP】3276. 选择矩阵中单元格的最大得分|2403

本文涉及知识点 C动态规划 3276. 选择矩阵中单元格的最大得分 给你一个由正整数构成的二维矩阵 grid。 你需要从矩阵中选择 一个或多个 单元格&#xff0c;选中的单元格应满足以下条件&#xff1a; 所选单元格中的任意两个单元格都不会处于矩阵的 同一行。 所选单元格的值 互…

IDEA 清除 ctrl+shift+r 全局搜索记录

定位文件&#xff1a;在Windows系统中&#xff0c;文件通常位于C:Users/用户名/AppData/Roaming/JetBrains/IntelliJIdea(idea版本)/workspace目录下&#xff0c;文件名为一小串随机字符&#xff1b;在Mac系统中&#xff0c;文件位于/Users/用户名/Library/Application /Suppor…

解锁AI大模型:Prompt工程全面解析

解锁AI大模型&#xff1a;Prompt工程全面解析 本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型开发 学习视频/籽料/面试题 都在这>>Github<< 从新手到高手&#xff0c;Prompt 工程究竟是什么&#xff1f; 在当今数字化时代&#xff0c;AI …