2017-07-30 32 views
-2

我在C++中做了一些QT。使用while循環時不會出現窗口

但是,當我在代碼中使用while(1)循環時,窗口從不出現。我嘗試了很多東西,例如在循環結尾添加QApplication::processEvents();,但它不起作用。沒有窗戶。

如何讓窗口出現?

示例代碼:

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

while(1){ 
} 

} 

由於

+1

你應該粘貼一些代碼,以便我們看到。 –

+0

在循環前加入'QMainWindow :: show();'在循環中加入'QApplication :: processEvents();'解決了這個問題,但是窗口沒有關閉。 –

+3

這是一個很好的例子,說明爲什麼你不應該在GUI程序中阻塞事件循環。 – MrEricSir

回答

3

每個構件函數都不應該阻塞主消息循環!

主消息循環通常是這樣的:

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

在你的情況你MainWindow構造函數永遠不會返回,所以w.show(),不會被調用永遠不會執行a.exec()(主messgae循環)。

不僅阻塞可能是主窗口ctor中的問題,而且在執行主消息循環之前生成的信號從不會被引發。例如,在主窗口ctor內建立TCP/IP連接將永遠不會增加信號和關聯的插槽。 * 1

至少如果主窗口的創建在執行主消息循環之前就像在99%的情況下執行一樣。

0

,使得被處理的繪製消息必須無效窗口矩形和產量;然後在while循環中繼續;或者只是編碼進度條窗口。