Question
Je travaille sur un projet en C ++ et QT et je souhaite ouvrir une nouvelle fenêtre QWidget, permettre à l'utilisateur d'interagir avec elle, etc., puis faire en sorte que l'exécution revienne à la méthode qui a ouvert la fenêtre. Exemple (MyClass hérite de QWidiget):
void doStuff(){
MyClass newWindow = new Myclass();
/*
I don't want the code down here to
execute until newWindow has been closed
*/
}
Je pense qu’il existe très probablement un moyen très facile de faire cela, mais pour une raison quelconque, je ne peux pas le comprendre. Comment puis-je faire cela?
La solution
Faites en sorte que MyClass
hérite de QDialog
. Puis ouvrez-le en tant que dialogue modal avec exec ()
.
void MainWindow::createMyDialog()
{
MyClass dialog(this);
dialog.exec();
}
Autres conseils
Une autre solution consiste à utiliser une boucle qui attend l'événement de clôture:
#include <QEventLoop>
void doStuff()
{
// Creating an instance of myClass
MyClass myInstance;
// (optional) myInstance.setAttribute(Qt::WA_DeleteOnClose);
myInstance.show();
// This loop will wait for the window is destroyed
QEventLoop loop;
connect(this, SIGNAL(destroyed()), & loop, SLOT(quit()));
loop.exec();
}
Pourquoi ne pas mettre le code que vous ne voulez pas exécuter tant que la fenêtre ne sera pas fermée dans une fonction distincte et le connecter en tant que SLOT
pour la fermeture de la fenêtre SIGNAL
?