2011-02-11 118 views
0

我有一個QDialog的,我開這樣的:打開了QDialog在非阻塞方式

void MyModule::openDialog() { 
    this->dialog->open(); 
    printf("Hello World"); 
} 

對話框打開就好了,可惜調用openDialog()時,不打印的「Hello World」 - 即使在關閉對話框之後。但是,之後當我打開另一個完全不相關的文件對話框時,將顯示該消息。

什麼是導致對話框阻塞,直到另一個對話框打開?當我使用this->dialog->exec();this->dialog->show();時,會發生同樣的情況。

可能值得注意的是,MyModule::openDialog()是一個連接到按鈕的點擊事件的插槽。

任何想法?

+0

QTDialog還是你的意思是`QDialog`? – doc 2011-02-12 00:29:32

+0

我對Qt一無所知,但要確保您將第一個對話框顯示爲*非*模式對話框。模式對話框將阻止執行,直到對話框消失。 – 2011-02-12 06:55:57

回答

4

它取決於操作系統,但通常printf()不能很好地與GUI配合使用。

在窗口例如什麼都不會出現,在Unix上你可以做fprintf中(標準輸出),然後fflush(標準輸出)或fprintf中(錯誤)未緩衝

如果這僅僅是一個調試功能,看看qDebug() - 它就是這樣。

1

stdout被緩衝。調用printf("Hello world");將不輸出任何內容,直到輸出緩衝區已滿或(有時)打印換行符爲止。嘗試撥打printf("Hello World\n");而不是printf("Hello World\n"); fflush(stdout);