Question
I'm working on a project in C++ and QT, and I want to open a new QWidget window, have the user interact with it, etc, then have execution return to the method that opened the window. Example (MyClass inherits QWidiget):
void doStuff(){
MyClass newWindow = new Myclass();
/*
I don't want the code down here to
execute until newWindow has been closed
*/
}
I feel like there is most likely a really easy way to do this, but for some reason I can't figure it out. How can I do this?
Solution
Have MyClass
inherit QDialog
. Then open it as a modal dialog with exec()
.
void MainWindow::createMyDialog()
{
MyClass dialog(this);
dialog.exec();
}
OTHER TIPS
An other way is to use a loop which waits on the closing event :
#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();
}
Why not put the code you don't want to be executed till the window has closed in a separate function and connect this as a SLOT
for the window's close SIGNAL
?
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow