Вопрос
Я работаю над проектом на 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
*/
}
Я чувствую, что, скорее всего, есть действительно простой способ сделать это, но по какой-то причине я не могу понять это. Как я могу это сделать?
Решение
Иметь MyClass
наследовать QDialog
. Затем откройте его как модальный диалог с помощью exec ()
.
void MainWindow::createMyDialog()
{
MyClass dialog(this);
dialog.exec();
}
Ознакомьтесь с http://qt-project.org/doc/qt- 4.8 / qdialog.html р>
Другие советы
Другой способ - использовать цикл, который ожидает события закрытия:
#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