我正在使用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
*/
}
我觉得很可能有一种非常简单的方法可以做到这一点,但由于某些原因我无法弄明白。我怎么能这样做?
答案 0 :(得分:27)
让MyClass
继承QDialog
。然后将其打开为exec()
的模态对话框。
void MainWindow::createMyDialog()
{
MyClass dialog(this);
dialog.exec();
}
答案 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
?