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

来源:互联网 发布:关口知宏漫画 编辑:程序博客网 时间:2024/05/29 18:18

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()





0 0
原创粉丝点击