Вопрос

Я работаю над проектом на 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top