Ouvrir QDialog de manière non bloquante
Question
J'ai un QDialog que j'ouvre comme ceci :
void MyModule::openDialog() {
this->dialog->open();
printf("Hello World");
}
La boîte de dialogue s'ouvre très bien, mais malheureusement "Hello World" n'est pas imprimé lors de l'appel d'openDialog() - même après la fermeture de la boîte de dialogue.Cependant, lorsque j'ouvre ensuite une autre boîte de dialogue de fichier totalement indépendante, le message est imprimé.
Qu'est-ce qui provoque le blocage de la boîte de dialogue jusqu'à ce qu'une autre boîte de dialogue soit ouverte ?La même chose se produit lorsque j'utilise this->dialog->exec();
ou this->dialog->show();
.
Il serait peut-être intéressant de noter que MyModule::openDialog()
est un emplacement qui est connecté à l'événement clic d'un bouton.
Des idées?
La solution
Cela dépend du système d'exploitation mais généralement printf() ne fonctionne pas bien avec les interfaces graphiques.
Sous Windows, par exemple, rien n'apparaît, sous Unix, vous pouvez faire fprintf(stdout, ) puis fflush(stdout) ou fprintf(stderr, ) qui n'est pas mis en mémoire tampon.
S'il ne s'agit que d'une fonction de débogage, jetez un œil à qDebug() - c'est à cela qu'elle sert.
Autres conseils
stdout est mis en mémoire tampon.Appel printf("Hello world");
ne produira rien jusqu'à ce que le tampon de sortie soit plein ou (parfois) qu'une nouvelle ligne soit imprimée.Essayez d'appeler printf("Hello World\n");
à la place ou printf("Hello World\n"); fflush(stdout);