我有一个QDialog,我这样打开:
void MyModule::openDialog() {
this->dialog->open();
printf("Hello World");
}
对话框打开很好,但遗憾的是,在调用openDialog()时,即使关闭对话框后也不会打印“Hello World”。但是,当我之后打开另一个完全不相关的文件对话框时,将打印出该消息。
在打开另一个对话框之前导致对话框阻塞的原因是什么?当我使用this->dialog->exec();
或this->dialog->show();
时会发生同样的事情。
值得注意的是MyModule::openDialog()
是一个连接到按钮点击事件的插槽。
有什么想法吗?
答案 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);