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?
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?