Подождите, пока QWidget не закроется

Я работаю над проектом на С++ и QT, и я хочу открыть новое окно QWidget, связать с ним пользователя и т.д., а затем вернуть выполнение методу, открывающему окно. Пример (MyClass наследует QWidiget):

void doStuff(){

     MyClass newWindow = new Myclass();
     /* 
        I don't want the code down here to 
        execute until newWindow has been closed
      */
}

Я чувствую, что есть, пожалуй, самый простой способ сделать это, но по какой-то причине я не могу понять это. Как я могу это сделать?

Ответ 1

Имейте MyClass inherit QDialog. Затем откройте его как модальный диалог с exec().

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

Отъезд http://qt-project.org/doc/qt-4.8/qdialog.html

Ответ 2

Другой способ - использовать цикл, который ждет событие закрытия:

#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();
}

Ответ 3

Почему бы не поместить код, который вы не хотите исполнять, до тех пор, пока окно не будет закрыто в отдельной функции и не подключится к нему как SLOT для закрытия окна SIGNAL?