1.问题描述:
QT项目中,发现界面调用show()之后,并不能直接显示出界面,需要等msleep(3000)执行完以后,才可以。
MainWindow w;
w.show();
QThread::msleep( 3000 );
return a.exec
2.原因分析:
(3000),占用了该线程
3.处理方式:
QCoreApplication::processEvents(); //后台处理程序
个人理解,就是后台去处理下面的事情,让界面保持响应能力
如下官方解释
根据指定的标记处理调用线程的所有挂起事件,直到没有更多的事件处理。
当您的程序忙于执行长时间操作(例如复制文件)时,可以偶尔调用此功能。
如果您正在运行连续调用此函数的本地循环,而不发生事件循环,则不会处理DeferredDelete事件。 这可能会影响窗口小部件的行为,例如 QToolTip,依赖于DeferredDelete事件才能正常运行。 另一种方法是从该本地循环中调用sendPostedEvents()。
调用此函数仅处理调用线程的事件。
注意:此功能是线程安全的。
4.解决后:
MainWindow w;
w.show();
QCoreApplication::processEvents();
QThread::msleep( 3000 );
return a.exec();
QApplication::processEvents()