Qt同步處理業務并禁用按鈕

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 …