等到QWidget关闭

Jar*_*rek 17 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
      */
}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ith 29

MyClass继承QDialog.然后打开它作为模态对话框exec().

void MainWindow::createMyDialog()
{
  MyClass dialog(this);
  dialog.exec();
}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果其他人想使用 `setModal()` 和 `show()`,这是 http://doc.qt.io/qt-5/qdialog.html#modal-dialogs 所说的:*“最常见的显示模态对话框的方法是调用其 exec() 函数。(...) 另一种方法是调用 setModal(true) 或 setWindowModality(),然后是 show()。与 exec() 不同,show() 将控制权返回给立即呼叫。”* (2认同)

56k*_*6ka 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();
}
Run Code Online (Sandbox Code Playgroud)