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?

¿Fue útil?

Solución

Haga que MyClass herede QDialog . Luego, ábralo como un diálogo modal con exec () .

void MainWindow::createMyDialog()
{
  MyClass dialog(this);
  dialog.exec();
}

Visite http://qt-project.org/doc/qt- 4.8 / qdialog.html

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 ?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top