Frage

Ich bin an einem Projekt in C ++ arbeiten und QT, und ich möchte ein neues QWidget-Fenster öffnen, hat der Benutzer mit ihr interagieren, etc, haben dann die Ausführung Rückkehr zu der Methode, die das Fenster geöffnet. Beispiel (MyClass erbt QWidiget):

void doStuff(){

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

Ich fühle mich wie es ist wahrscheinlich eine wirklich einfache Möglichkeit, dies zu tun, aber aus irgendeinem Grund, den ich kann es nicht herausgefunden. Wie kann ich das tun?

War es hilfreich?

Lösung

Haben MyClass erben QDialog. Dann öffnen Sie es als modaler Dialog mit exec().

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

Schauen Sie sich http://qt-project.org/doc/qt- 4.8 / qdialog.html

Andere Tipps

Eine andere Möglichkeit ist, eine Schleife zu verwenden, die auf der Abschlussveranstaltung wartet:

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

Warum nicht den Code setzen Sie wollen nicht ausgeführt werden, bis das Fenster in einer separaten Funktion geschlossen und verbinden dies als SLOT für die enge SIGNAL Fenster?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top