Открытие QDialog неблокирующим способом - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть QDialog, который я открываю так:

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

Диалог открывается просто отлично, но, к сожалению, «Hello World» не выводится при вызове openDialog () - даже после закрытия диалога.Однако, когда я впоследствии открываю еще одно совершенно не связанное с файлом диалоговое окно, сообщение выводится на печать.

Что вызывает блокирование диалогового окна до тех пор, пока не будет открыто другое диалоговое окно?То же самое происходит, когда я использую this->dialog->exec(); или this->dialog->show();.

Возможно, стоит отметить, что MyModule::openDialog() - это слот, который связан с событием нажатия кнопки.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 12 февраля 2011

Это зависит от ОС, но обычно printf () не очень хорошо работает с графическим интерфейсом.

В Windows, например, ничего не появится, в Unix вы можете выполнить fprintf (stdout,) и затем fflush (stdout) или fprintf (stderr,), который не буферизуется

Если это просто функция отладки, взгляните на qDebug () - это то, для чего он нужен.

1 голос
/ 12 февраля 2011

стандартный вывод буферизуется.Вызов printf("Hello world"); ничего не выдаст, пока буфер вывода не заполнится или (иногда) не будет напечатана новая строка.Попробуйте позвонить printf("Hello World\n"); или printf("Hello World\n"); fflush(stdout);

...