Pregunta
Estoy trabajando en un proyecto en C ++ y QT, y quiero abrir una nueva ventana de QWidget, hacer que el usuario interactúe con él, etc., y luego volver a la ejecución del método que abrió la ventana. Ejemplo (MyClass hereda QWidiget):
void doStuff(){
MyClass newWindow = new Myclass();
/*
I don't want the code down here to
execute until newWindow has been closed
*/
}
Siento que es muy probable que sea una forma muy fácil de hacer esto, pero por alguna razón no puedo resolverlo. ¿Cómo puedo hacer esto?
Solución
Haga que MyClass
herede QDialog
. Luego, ábralo como un diálogo modal con exec ()
.
void MainWindow::createMyDialog()
{
MyClass dialog(this);
dialog.exec();
}
Otros consejos
Otra forma es usar un bucle que espere el evento de cierre:
#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();
}
¿Por qué no colocar el código que no desea que se ejecute hasta que la ventana se haya cerrado en una función separada y conectar esto como un SLOT
para el cierre de la ventana SIGNAL
?