Pergunta

Eu estou trabalhando em um projeto em C ++ e QT, e eu quero abrir uma nova janela QWidget, têm o interagem usuário com ele, etc, em seguida, ter o retorno de execução para o método que abriu a janela. Exemplo (MyClass herda QWidiget):

void doStuff(){

     MyClass newWindow = new Myclass();
     /* 
        I don't want the code down here to 
        execute until newWindow has been closed
      */
}

Eu sinto que há provavelmente uma maneira muito fácil de fazer isso, mas por alguma razão eu não posso descobrir isso. Como posso fazer isso?

Foi útil?

Solução

Tem MyClass QDialog herdar. Em seguida, abra-o como um diálogo modal com exec().

void MainWindow::createMyDialog()
{
  MyClass dialog(this);
  dialog.exec();
}

Confira http://qt-project.org/doc/qt- 4.8 / qdialog.html

Outras dicas

Uma outra maneira é usar um loop que espera no evento de encerramento:

#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();
}

Por que não colocar o código que você não quer ser executado até que a janela foi fechada em uma função separada e conectar este como um SLOT para SIGNAL perto da janela?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top