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();
相关推荐
小学生搞程序14 分钟前
学习Python的优势体现在哪些方面?
开发语言·python·学习
yezipi耶不耶15 分钟前
Rust入门之迭代器(Iterators)
开发语言·后端·rust
Yolo566Q18 分钟前
当气象水文遇见R语言——破解时空数据的“达芬奇密码“
开发语言·r语言
weixin_4932026340 分钟前
R语言网状Meta分析---Meta回归(1)(基于gemtc)
开发语言·回归·r语言
muxue1781 小时前
go:实现最简单区块链
开发语言·后端·golang
Achou.Wang1 小时前
go语言内存泄漏的常见形式
开发语言·golang
旅行的橘子汽水1 小时前
【C语言-全局变量】
c语言·开发语言·数据库
晴天毕设工作室1 小时前
计算机毕业设计指南
java·开发语言·python·计算机网络·课程设计
jhtwn2 小时前
Java NIO之Buffer
java·开发语言
沐墨专攻技术2 小时前
顺序表专题(C语言)
c语言·开发语言·数据结构·顺序表