Opening QDialog in a non-blocking manner

1.2k views Asked by At

I have a QDialog which I open like this:

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

The dialog opens just fine, but unfortunately "Hello World" isn't printed when calling openDialog() - even after closing the dialog. However, when I open another completely unrelated file dialog afterwards, the message is printed out.

What is causing the dialog to block until another dialog is opened? The same thing happens when I'm using this->dialog->exec(); or this->dialog->show();.

It might be worth noting that MyModule::openDialog() is a slot which is connected to the click-event of a button.

Any ideas?

2

There are 2 answers

2
Martin Beckett On BEST ANSWER

It depends on the OS but generally printf() doesn't play nicely with GUIs.

On windows for instance nothing would appear, on unix you could do fprintf(stdout, ) and then fflush(stdout) or fprintf(stderr, ) which isn't buffered

If this is just a debug function, take a look at qDebug() - it's what it's there for.

0
Chris On

stdout is buffered. Calling printf("Hello world"); will not output anything until the output buffer is full or (sometimes) a newline is printed. Try calling printf("Hello World\n"); instead or printf("Hello World\n"); fflush(stdout);