首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt: mainWindow-> show ();不显示mainWindow

Qt: mainWindow-> show ();不显示mainWindow
EN

Stack Overflow用户
提问于 2010-12-04 06:52:23
回答 2查看 13.9K关注 0票数 3

在下面的代码中,我创建了一个窗口,调用window.show(),但是直到调用window->iterateSolution()之后,窗口才会显示出来。几乎就像,app.exec()是显示窗口的函数。我对Qt非常陌生,所以我不知道发生了什么。

代码语言:javascript
复制
#include <QtGui/QApplication>
#include <mainWindow.h>
#include <Cube.h>

mainWindow * newWindow;

int main(int argc, char *argv[]) {
    // initialize resources, if needed
    // Q_INIT_RESOURCE(resfile);

    QApplication app(argc, argv);
    newWindow = new mainWindow;
    newWindow->show();

    QString initialState = "YWOBYYBYYGRRGRRBWWYOOYGGRGGBBGYOOYOOWRRBBRBBWGOOGWWRWW";

    /* Construct cube, set state, and solve */
    Cube * cube = new Cube(initialState);
    QString solution = cube->solve();
    delete cube;
    newWindow->iterateSolution(solution);

    // create and show your widgets here

    return app.exec();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-04 07:01:30

这正是正在发生的事情。

从技术上讲,QMainWindow::show()不会使窗口可见,它只是在窗口中设置一个标志,而Qt将使其在事件循环的下一次迭代中可见。

另外,直接从Qt文档中获取QApplication::exec():

需要调用此函数来启动事件处理。主事件循环从窗口系统接收事件,并将这些事件分派到应用程序小部件。

通常,在调用exec()之前不能进行任何用户交互。

票数 4
EN

Stack Overflow用户

发布于 2014-03-17 19:06:03

在我看来,你想要一个多线程的应用程序。一个线程负责UI,另一个线程将求解立方体,并将更新发布到UI线程以显示进度。可以使用信号和槽使多维数据集对象和mainWindow对象进行通信,以解决线程间的通信问题(请参见http://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/)。

否则,如果将这两个操作放在同一个线程上,UI将“挂起”,因为主线程将无法处理UI事件(包括您在问题中特别提到的show事件)。

如果这有点过分,您可以通过调用QApplication:: process (...)来指示应用程序显式地处理UI事件。在任何长时间运行的同步操作之前(并且最好是在期间)。这将对UI执行一次更新,以便用户(和操作系统)知道应用程序未挂起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4350624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档