網站首頁 編程語言 正文
問題描述
我的Qt程序有一個時間顯示的功能,由于需要保持長期運行,這個時間控件就需要長期持續刷新。但是,當程序運行一段時間后,這個控件就似乎累了一樣,不再繼續刷新了。為了解決這個問題,我嘗試過很多方法,包括:
- 每隔一段時間,獲取時間settext到控件上
- 通過update(),repaint()等頁面刷新方法
- 使用qApp.processEvent()強制執行操作
但是,無論怎么努力,都無法解決問題,我開始懷疑這是Qt的底層bug。
與我遇到同樣問題的人也有很多,下面這些都是例子。
Qt長時間運行界面停止刷新的解決辦法
Qt bug(?) display stops updating
解決方法
之前,這段代碼運行在一個持續刷新的定時器里。
void Example::clockSlot()
{
datetime = QDateTime(QDateTime::currentDateTime());
QString str1 = datetime.toString("hh:mm:ss");
QString str2 = datetime.toString("yyyy年MM月dd日");
curTime -> setText(str1);
curDate -> setText(str2);
}
我推測定時器QTimer應該比較特殊,雖然它看起來運行在主線程中,因為它有時確實會阻塞主線程,但是它還是會被算作線程。
當GUI相關的東西運行在線程里,確實就會出現這種現象。這里的settext()就與GUI相關。
修改方法就是使用信號,代碼如下:
connect(this,SIGNAL(time_update()),this,SLOT(updateTime()));
//原來計時器的函數
void Example::clockSlot()
{
emit(time_update());
}
void Example::updateTime()
{
datetime = QDateTime(QDateTime::currentDateTime());
QString str1 = datetime.toString("hh:mm:ss");
QString str2 = datetime.toString("yyyy年MM月dd日");
curTime -> setText(str1);
curDate -> setText(str2);
}
果然,問題解決了。
結論
GUI相關代碼不要放在線程或QTimer中,多用信號處理。
原文鏈接:https://blog.csdn.net/nchu_zhangyiqing/article/details/124689373
相關推薦
- 2022-07-21 nginx?配置指令之location使用詳解_nginx
- 2022-03-26 asp.net?core?中優雅的進行響應包裝的實現方法_實用技巧
- 2022-12-07 C++中的類成員函數當線程函數_C 語言
- 2022-09-04 Python裝飾器有哪些絕妙的用法_python
- 2024-07-18 Spring Security概述快速入門
- 2022-08-04 react使用mobx封裝管理用戶登錄的store示例詳解_React
- 2022-09-14 Flutter?iOS開發OC混編Swift動態庫和靜態庫問題填坑_Swift
- 2022-11-07 python中if的基礎用法(if?else和if?not)_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支