QT: Fenster schließen, EventLoop beenden.
-
Hey Leute folgender Code:
QEventLoop *test = new QEventLoop; Window* viewer = new Window(); viewer->show(); test->exec();
Also meine Klasse Window ist von QMainWindow abgeleitet.
Das Makro Q_OBJECT hab ich auch in der Klassendefinition, damit ich SIGNAL und SLOTS verwenden kann.Zu meinem Problem, ich weiß nicht wie ich das anstellen soll, damit die QEventLoop test, beendet wird, sobald mein Window mit einem Klick auf das X beendet wird.
Mit dem Signal destroyed() klappt es leider nicht=(
Hoffe ihr könnt mir helfen.
Gruß freeG
-
- closeEvent()
- Warum brauchst du eine eigene zusätzliche QEventLoop? Du hast doch ein QApplication-Objekt...
-
Also mit closeEvent() funktioniert es leider auch nicht.
Ja, also ist ein bisschen schwer zu erklären.
Die QApplication app ist ja in der main.cpp
So und da wird mein Fenster angezeigt mit show() und die app gestartet.
So jedoch rufe ich in einem SLOT meines Fensters, ein neues Fenster auf mittels show().
Und ohne eine QEventLoop, verschwindet mein neues Fenster gleich wieder...Hoffe du hast es verstanden:-P
Schwer zu erklären.
Gruß freeG
EDIT:
Ok ich hab mal wieder viel zu kompliziert gedacht, mein Fenster ist immer sofort wieder verschwunden weil hinten dran eine QMessageBox über .exec() gestartet wurde.Hab das ganze jetzt anderster gelöst.
Vielen Dank trotzdem labrador;-)
Gruß freeG
-
Zeig mal die main.cpp.
-
Gerne:D
int main( int argc, char* argv[] ) { QApplication app( argc, argv ); myWindow* window = new myWindow; window->show(); return app.exec(); }
Un das andere Fenster für das ich ne Event Loop hatte, wird in nem Slot von window aufgerufen.
Aber wie gesagt, es lag irgendwie daran, dass ich direkt danach ne QMessageBox mittels .exec() aufgerufen habe.Jetzt funktioniert alles.
Danke
Gruß freeG
-
Hallo,
dieser Beitrag ist zwar länger her aber ich habe ähnliches Problem.
Daher werde ich meine Frage hier stellen.ich öffnen durch einen Button click im MainClass ein zweites Fenster, nennen wir es mal SecondClass. Wenn ich aber den MainClass schließe bleibt der SecondClass offen. Woran liegt das?
Vielen dank schon mal für die Hilfe..
und hier mein Code:
//->MainClass.h #include <QtGui> #include <QtGui/QWidget> #include "ui_mainclass.h" #include "secondClass.h" class MainClass : public QWidget { Q_OBJECT SecondClass *secClass; public: MainClass(QWidget *parent = 0, Qt::WFlags flags = 0); ~MainClass(); public slots: void zweitesFensterOffnen(void); private: Ui::MainClass ui; };
//->MainClass.cpp #include "mainclass.h" MainClass::MainClass(QWidget *parent, Qt::WFlags flags) : QWidget(parent, flags) { ui.setupUi(this); secClass = new SecondClass; connect(ui.cmdZweitesFensterOffnen, SIGNAL(clicked()), this, SLOT(zweitesFensterOffnen())); } MainClass::~MainClass() { delete secClass; } void MainClass::zweitesFensterOffnen(void) { secClass->show(); }
//->SecondClass.h #include <QtGui/QDialog> #include "ui_zweitesFenster.h" class SecondClass : public QDialog { Q_OBJECT public: SecondClass(QDialog *parent = 0, Qt::WFlags flags = 0); ~SecondClass(); private: Ui::SecondClass ui; };
//->SecondClass.cpp #include "secondclass.h" SecondClass::SecondClass(QDialog *parent, Qt::WFlags flags) : QDialog(parent, flags) { ui.setupUi(this); } SecondClass::~SecondClass() { }
-
was ich noch bemerkt habe, wenn MainClass beendet wird durch click auf Exit-Button wird der Destruktor von MainClass nicht aufgerufen.
Dadurch kann SekonClass nicht beendet werden.
Warum wird der Destruktor nicht aufgerufen?
-
ok Problem gelöst
zwar wird der Destruktor nicht aufgerufen, aber wenn der MainClass beendet wird wird closeEvent() aufgerufen.
void MainClass::closeEvent( QCloseEvent *event ) { delete secClass; // Damit die Anwendung schließt muß das Event akzeptiert werden event->accept(); }