C++ 以非阻塞方式打开QDialog

C++ 以非阻塞方式打开QDialog,c++,qt,qdialog,qt-events,C++,Qt,Qdialog,Qt Events,我有一个QDialog,打开时如下所示: void MyModule::openDialog() { this->dialog->open(); printf("Hello World"); } 对话框可以正常打开,但不幸的是,调用openDialog()时,即使在关闭对话框后,也不会打印“Hello World”。但是,当我随后打开另一个完全不相关的文件对话框时,消息被打印出来 在打开另一个对话框之前,是什么导致对话框阻塞?使用this->dialog->exec

我有一个QDialog,打开时如下所示:

void MyModule::openDialog() {
    this->dialog->open();
    printf("Hello World");
}
对话框可以正常打开,但不幸的是,调用openDialog()时,即使在关闭对话框后,也不会打印“Hello World”。但是,当我随后打开另一个完全不相关的文件对话框时,消息被打印出来

在打开另一个对话框之前,是什么导致对话框阻塞?使用
this->dialog->exec()时也会发生同样的情况
此->对话框->显示()

可能值得注意的是,
MyModule::openDialog()
是一个连接到按钮单击事件的插槽


有什么想法吗?

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

例如,在windows上不会显示任何内容,在unix上可以执行fprintf(stdout),然后执行未缓冲的fflush(stdout)或fprintf(stderr)


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

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

例如,在windows上不会显示任何内容,在unix上可以执行fprintf(stdout),然后执行未缓冲的fflush(stdout)或fprintf(stderr)


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

stdout是缓冲的。调用printf(“你好世界”)不会输出任何内容。尝试调用
printf(“Hello World\n”)替代或
printf(“Hello World\n”);fflush(stdout)

标准输出已缓冲。调用printf(“你好世界”)不会输出任何内容。尝试调用
printf(“Hello World\n”)替代或
printf(“Hello World\n”);fflush(stdout)

QTDialog还是您的意思是
QDialog
?我对Qt一无所知,但请确保您将第一个对话框显示为非模式对话框。模式对话框将阻止执行,直到对话框被取消。@doc:是的,你说得对。我指的是QDialog.qtalog,还是您指的是
QDialog
?我对Qt一无所知,但请确保您将第一个对话框显示为非模式对话框。模式对话框将阻止执行,直到对话框被取消。@doc:是的,你说得对。我的意思是QDialog.printf()可以很好地使用GUI,即使在Windows下。。。但如果您想在Windows下实际查看标准输出,则必须执行AllocConsole();freopen(“conout$”,w,stdout);在main()的顶部。然后,当程序运行时,将出现一个控制台窗口,其中包含您的输出。@Jeremy-这几乎是我对“玩得不好”的定义,printf()在GUI中也能正常工作,即使在Windows下也是如此。。。但如果您想在Windows下实际查看标准输出,则必须执行AllocConsole();freopen(“conout$”,w,stdout);在main()的顶部。然后,当程序运行时,将出现一个包含您的输出的控制台窗口。@Jeremy-这几乎是我对“玩得不好”的定义