0

我有一个像这样打开的 QDialog:

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

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

是什么导致对话框阻塞,直到打开另一个对话框?当我使用this->dialog->exec();or时也会发生同样的事情this->dialog->show();

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

有任何想法吗?

4

2 回答 2

4

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

例如在 Windows 上什么都不会出现,在 unix 上你可以做 fprintf(stdout, ) 然后 fflush(stdout) 或 fprintf(stderr, ) 没有缓冲

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

于 2011-02-12T00:07:12.410 回答
1

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

于 2011-02-12T04:14:22.143 回答