Открытие QDialog неблокирующим способом

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

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

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

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

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

Есть идеи?

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам