Domanda

Sto lavorando a un progetto in C ++ e QT e voglio aprire una nuova finestra di QWidget, far interagire l'utente con esso, ecc., quindi eseguire l'esecuzione per tornare al metodo che ha aperto la finestra. Esempio (MyClass eredita QWidiget):

void doStuff(){

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

Sento che molto probabilmente c'è un modo davvero semplice per farlo, ma per qualche ragione non riesco a capirlo. Come posso farlo?

È stato utile?

Soluzione

Avere MyClass ereditare QDialog . Quindi aprilo come una finestra di dialogo modale con exec () .

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

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

Altri suggerimenti

Un altro modo è usare un loop che attende l'evento di chiusura:

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

Perché non inserire il codice che non si desidera eseguire fino a quando la finestra non si chiude in una funzione separata e collegarlo come SLOT per la chiusura della finestra SIGNAL ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top