gtkmm - Fenster verstecken ohne die Applikation zu beenden
-
Google und Forumsuche haben merkwüdrigerweise nichts ergeben. Bei so einem Thema hätte ich das schon erwartet, aber vielleicht hab ich ja auch falsch gesucht. Mein Problem ist recht schnell erklärt: ich habe ein Login-Fenster. Nachdem der Benutzer in einem Textfeld auf Enter gedrückt hat, soll sich das Login-Fenster schließen und das Hauptfenster öffnen. Das Login-Fenster hab ich in der Gtk::Main::run() angegeben, was wohl auch das Problem ist, da die Hauptschleife unterbrochen wird, sobald das Hauptfenster geschlossen wird. Code:
int main(int argc, char **argv) { Gtk::Main oMain(argc, argv); main_window oMainWindow; login_window oLoginWindow(&oMainWindow); oMain.run(oLoginWindow); return 0; }
Wie gesagt hab ich nun im login_window ein Textfeld. Bei Druck auf Enter darin wird diese Funktion aufgerufen:
void login_window::txtLogin_activate() { this->hide(); this->pNextWindow->show(); }
this->pNextWindow ist einfach ein Pointer auf das nächste Fenster (wird in der main() an den Konstruktor übergeben). Wie löse ich das Problemchen am besten?
-
Ich weiss zwar nicht, ob das so am besten ist, aber so funktionierts es:
#include <gtkmm.h> struct MainWindow : Gtk::Window { MainWindow() { set_title("Main Window"); } virtual bool on_delete_event(GdkEventAny *event) { Gtk::Main::quit(); } }; struct LoginWindow : Gtk::Window { LoginWindow(MainWindow *mw) : mw(mw) { set_title("Login Window"); } virtual bool on_delete_event(GdkEventAny *event) { mw->show(); hide(); } MainWindow *mw; }; int main(int argc, char **argv) { Gtk::Main main (argc, argv); MainWindow mw; LoginWindow lw(&mw); lw.show(); main.run(); return 0; }
Eventuell reicht bei dir auch schon
oMain.run(oLoginWindow);
durch
oLoginWindow.show(); oMain.run();
zu ersetzen.
-
Danke! Die Lösung reicht mir