我正在使用C ++在QT中创作。
但是,当我在代码中使用while(1)
循环时,窗口永远不会出现。我尝试了很多东西,例如在循环结束时添加QApplication::processEvents();
,但它不起作用。没有窗户。
如何让窗口出现?
示例代码:
MainWindow::MainWindow(QWidget * parent, Qt::WindowFlags flags) : QMainWindow(parent, flags) {
_ui.setupUi(this);
while(1){
}
}
由于
答案 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循环;或者只是编写一个进度条窗口。