2011-02-11 282 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);