使用while循环时不显示窗口

时间:2017-07-30 21:35:10

标签: c++ qt while-loop

我正在使用C ++在QT中创作。

但是,当我在代码中使用while(1)循环时,窗口永远不会出现。我尝试了很多东西,例如在循环结束时添加QApplication::processEvents();,但它不起作用。没有窗户。

如何让窗口出现?

示例代码:

MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) {
    _ui.setupUi(this);

while(1){
}

}

由于

2 个答案:

答案 0 :(得分:3)

每个小部件构造函数都不应该阻止主消息循环!

主消息循环通常如下所示:

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    MainWindow w(nullptr);
    w.show();
    int r = a.exec();
    return r
}

在您的情况下,MainWindow ctor永远不会返回,因此永远不会调用w.show(),并且永远不会执行a.exec()(主要的messgae循环)。

不仅阻塞可能是主窗口ctor中的问题,而且在执行主消息循环之前生成的信号也从未引发过。对于在主窗口内建立TCP / IP连接的示例,ctor将永远不会引发connected()信号和相关的时隙。 * 1

至少如果主窗口的创建是在99%的情况下执行主消息循环之前。

答案 1 :(得分:0)

您必须使窗口矩形无效并屈服,以便处理绘制消息;然后继续while循环;或者只是编写一个进度条窗口。