您的位置:首页 > 编程语言 > Qt开发

QT编程时,,界面不阻塞立刻显示

2017-05-02 15:40 330 查看
1.问题描述:

QT项目中,发现界面调用show()之后,并不能直接显示出界面,需要等msleep(3000)执行完以后,才可以。

MainWindow w;

w.show();

QThread::msleep( 3000 );


return a.exec


2.原因分析:

QThread.msleep(3000),占用了该线程

3.处理方式:

QCoreApplication::processEvents();    //后台处理程序


个人理解,就是后台去处理下面的事情,让界面保持响应能力

如下官方解释

根据指定的标记处理调用线程的所有挂起事件,直到没有更多的事件处理。

当您的程序忙于执行长时间操作(例如复制文件)时,可以偶尔调用此功能。

如果您正在运行连续调用此函数的本地循环,而不发生事件循环,则不会处理DeferredDelete事件。 这可能会影响窗口小部件的行为,例如 QToolTip,依赖于DeferredDelete事件才能正常运行。 另一种方法是从该本地循环中调用sendPostedEvents()。

调用此函数仅处理调用线程的事件。

注意:此功能是线程安全的。

4.解决后:

MainWindow w;

w.show();


QCoreApplication::processEvents();


QThread::msleep( 3000 );


return a.exec();


QApplication::processEvents()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: