Question

Je travaille sur un projet en C ++ et QT et je souhaite ouvrir une nouvelle fenêtre QWidget, permettre à l'utilisateur d'interagir avec elle, etc., puis faire en sorte que l'exécution revienne à la méthode qui a ouvert la fenêtre. Exemple (MyClass hérite de QWidiget):

void doStuff(){

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

Je pense qu’il existe très probablement un moyen très facile de faire cela, mais pour une raison quelconque, je ne peux pas le comprendre. Comment puis-je faire cela?

Était-ce utile?

La solution

Faites en sorte que MyClass hérite de QDialog . Puis ouvrez-le en tant que dialogue modal avec exec () .

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

Découvrez http://qt-project.org/doc/qt- 4.8 / qdialog.html

Autres conseils

Une autre solution consiste à utiliser une boucle qui attend l'événement de clôture:

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

Pourquoi ne pas mettre le code que vous ne voulez pas exécuter tant que la fenêtre ne sera pas fermée dans une fonction distincte et le connecter en tant que SLOT pour la fermeture de la fenêtre SIGNAL ?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top