以非阻塞方式打开QDialog

时间:2011-02-11 23:14:29

标签: c++ qt qdialog qt-events

我有一个QDialog,我这样打开:

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

对话框打开很好,但遗憾的是,在调用openDialog()时,即使关闭对话框后也不会打印“Hello World”。但是,当我之后打开另一个完全不相关的文件对话框时,将打印出该消息。

在打开另一个对话框之前导致对话框阻塞的原因是什么?当我使用this->dialog->exec();this->dialog->show();时会发生同样的事情。

值得注意的是MyModule::openDialog()是一个连接到按钮点击事件的插槽。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

这取决于操作系统,但通常printf()不能很好地与GUI配合使用。

在Windows上,例如没有任何东西会出现,在unix上你可以做fprintf(stdout,)然后fflush(stdout)或fprintf(stderr,)没有缓冲

如果这只是一个调试函数,请看一下qDebug() - 它就是它的用途。

答案 1 :(得分:1)

stdout是缓冲的。在输出缓冲区已满或(有时)打印换行符之前,调用printf("Hello world");将不会输出任何内容。请尝试拨打printf("Hello World\n");printf("Hello World\n"); fflush(stdout);