Ответ 1
Имейте MyClass
inherit QDialog
. Затем откройте его как модальный диалог с exec()
.
void MainWindow::createMyDialog()
{
MyClass dialog(this);
dialog.exec();
}
Я работаю над проектом на С++ и 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
*/
}
Я чувствую, что есть, пожалуй, самый простой способ сделать это, но по какой-то причине я не могу понять это. Как я могу это сделать?
Имейте MyClass
inherit QDialog
. Затем откройте его как модальный диалог с exec()
.
void MainWindow::createMyDialog()
{
MyClass dialog(this);
dialog.exec();
}
Другой способ - использовать цикл, который ждет событие закрытия:
#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();
}
Почему бы не поместить код, который вы не хотите исполнять, до тех пор, пока окно не будет закрыто в отдельной функции и не подключится к нему как SLOT
для закрытия окна SIGNAL
?