等到QWidget关闭

时间:2009-05-02 18:52:15

标签: c++ qt

我正在使用C ++和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
      */
}

我觉得很可能有一种非常简单的方法可以做到这一点,但由于某些原因我无法弄明白。我怎么能这样做?

3 个答案:

答案 0 :(得分:27)

MyClass继承QDialog。然后将其打开为exec()的模态对话框。

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

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

答案 1 :(得分:11)

另一种方法是使用等待结束事件的循环:

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

答案 2 :(得分:0)

为什么不在窗口关闭的单独函数中放置您不想执行的代码,并将其作为SLOT连接到窗口关闭SIGNAL