Attendere fino alla chiusura di QWidget
Domanda
Sto lavorando a un progetto in C ++ e QT e voglio aprire una nuova finestra di QWidget, far interagire l'utente con esso, ecc., quindi eseguire l'esecuzione per tornare al metodo che ha aperto la finestra. Esempio (MyClass eredita QWidiget):
void doStuff(){
MyClass newWindow = new Myclass();
/*
I don't want the code down here to
execute until newWindow has been closed
*/
}
Sento che molto probabilmente c'è un modo davvero semplice per farlo, ma per qualche ragione non riesco a capirlo. Come posso farlo?
Soluzione
Avere MyClass
ereditare QDialog
. Quindi aprilo come una finestra di dialogo modale con exec ()
.
void MainWindow::createMyDialog()
{
MyClass dialog(this);
dialog.exec();
}
Altri suggerimenti
Un altro modo è usare un loop che attende l'evento di chiusura:
#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();
}
Perché non inserire il codice che non si desidera eseguire fino a quando la finestra non si chiude in una funzione separata e collegarlo come SLOT
per la chiusura della finestra SIGNAL
?