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();
相关推荐
草莓啵啵~4 小时前
pywinauto-打开程序+连接已打开的程序
开发语言·python
Ws_11 小时前
C#学习 Day2
开发语言·学习·c#
杰克尼11 小时前
天机学堂复习总结(day03-day04)
java·开发语言·redis·elasticsearch·spring cloud
x***r15112 小时前
jdk-11.0.16.1_windows使用步骤详解(附JDK 11环境变量配置与验证教程)
java·开发语言·windows
luck_bor13 小时前
File类&递归作业
java·开发语言
努力努力再努力wz16 小时前
【Qt入门系列】:按钮组件全解析:从 QAbstractButton 到快捷键事件、单选与复选机制
c语言·开发语言·数据结构·c++·git·qt·github
skywalk816317 小时前
言知(Yanzhi)系统提升建议报告和完工报告 by AutoCoder
开发语言·编程
yunn_17 小时前
单例模式两种实现方法
开发语言·c++·单例模式
我材不敲代码17 小时前
Python基础:列表详解、增删改查及常用高阶操作
开发语言·windows·python
奇树谦17 小时前
QML 开发前端界面详解:从入门到示例实战
qt