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