Qt raise()问题

项目场景:

需要将一个弹窗提升至最前面,那么弹出时直接使用raise()即可。


问题描述:

使用QDialog::raise()时,偶发界面阻塞卡死现象。


原因分析:

QDialog::raise()函数是置于顶部的作用,但是如果使用不当,会导致界面线程卡死(弹窗是在界面线程弹出的),因为QDialog::raise()会阻塞当前线程,直到对话框置于顶部。


解决方案:

异步调用QDialog::raise(),通过QTimer::singleShot()实现。

QTimer::singleShot()是在主线程的的循环中调用的,因此使用它并不会阻塞主线程。

复制代码
用法示例:
QDialog* dialog = new QDialog();
dialog->show();
QTimer::singleShot(0, dialog, &QDialog::raise);

或者:
QDialog* dialog = new QDialog();
QTimer::singleShot(1, dialog, &QDialog::raise);
dialog->show();
相关推荐
ajassi20001 分钟前
开源 C++ QT QML 开发(十九)多媒体--音频录制
c++·qt·开源
多多*8 分钟前
上传文件相关业务,采用策略模式+模版方法模式进行动态解耦
java·开发语言
赴前尘38 分钟前
Go 通道非阻塞发送:优雅地处理“通道已满”的场景
开发语言·后端·golang
weixin_456904271 小时前
以太网与工业以太网通信C#开发
开发语言·c#
野猪亨利6671 小时前
Qt day1
开发语言·数据库·qt
lastHertz1 小时前
Golang 项目中使用 Swagger
开发语言·后端·golang
惜月_treasure1 小时前
LlamaIndex多模态RAG开发实现详解
开发语言·python·机器学习
isaki1372 小时前
qt day1
开发语言·数据库·qt
流星白龙2 小时前
【Qt】4.项目文件解析
开发语言·数据库·qt
iuuia2 小时前
05--JavaScript基础语法(1)
开发语言·javascript·ecmascript