Gtkmm mehrere Fenster
-
Hallo Community,
Ich benutze gtkmm und möchte außer dem Hauptfenster(welches ich durch Gtk::Main::run(fenster); aufrufe) noch ein weiteres Fenster anzeigen lassen.
Also:
GTK::WINDOW m_window;Gtk::Main::run(m_window); funktioniert
Ich hoffe ihr versteht was mein Problem ist und könnt mir weiterhelfen
-
Ich meinte Gtk::Main::run(m_window); funktioniert nicht
-
Das sollte man auch nur ein mal aufrufen.
Leite einfach von der Gtk::Window Klasse dein zweites Fenster ab und rufe dann im Ctor der ersten Klasse die show() Methode der zweiten Klasse auf.
-
Irgendwie funktioniert das bei mir nicht. Kannst du vlt ein kleines Beispiel machen?
Wäre dir sehr dankbar
mfg wandschrank
-
Was genau funktioniert nicht, und mit welchem Code hast du es probiert?
(Ausschnitte)
-
Ich habe mal ein vereinfachtes Beispiel gemacht, hoffe es sind keine Fehler darin:
class Klasse2 : public Gtk::Window { Klasse2() { set_default_size(500, 500); } }; class Klasse1 : public Gtk::Window { public: Klasse1() { set_default_size(500, 500); } private: void startfenster2() //Wird später irgendwann ausgeführt { Klasse2 window2(); window2.show(); //Geht auch nicht; Was muss ich jetzt hier schreiben das es funktioniert? //Gtk::Main::run(window2); <=geht nicht } }; int main (int argc, char *argv[]) { Gtk::Main kit(argc, argv); //Startet Gtk Main Klasse1 window1; Gtk::Main::run(window1); //startet Fenster }
-
class Klasse2 : public Gtk::Window { public: Klasse2() { set_default_size(500, 500); } }; class Klasse1 : public Gtk::Window { public: Klasse1() { set_default_size(500, 500); } private: void startfenster2() //Wird später irgendwann ausgeführt { Klasse2 window2; window2.show(); //Geht auch nicht; Was muss ich jetzt hier schreiben das es funktioniert? //Gtk::Main::run(window2); <=geht nicht } }; int main (int argc, char *argv[]) { Gtk::Main kit(argc, argv); //Startet Gtk Main Klasse1 window1; Gtk::Main::run(window1); //startet Fenster }
Wenn ich es so mache kommt der error:
Klasse1.cpp:(.text+0x2cc): undefined reference to `Klasse1::Klasse1()'
-
Weiß niemand wie das funktioniert, was der error bedeutet oder was ich falsch gemacht habe?
Ich bekomms einfach nicht hin
-
wandschrank schrieb:
class Klasse2 : public Gtk::Window { Klasse2() { set_default_size(500, 500); } }; class Klasse1 : public Gtk::Window { public: Klasse1() { set_default_size(500, 500); } private: void startfenster2() //Wird später irgendwann ausgeführt { Klasse2 window2(); window2.show(); //Geht auch nicht; Was muss ich jetzt hier schreiben das es funktioniert? //Gtk::Main::run(window2); <=geht nicht } }; int main (int argc, char *argv[]) { Gtk::Main kit(argc, argv); //Startet Gtk Main Klasse1 window1; Gtk::Main::run(window1); //startet Fenster }
Wenn du es so machst, wird window2 temporär angelegt, gezeigt, und gleich wieder zerstört, weil der Scope verlassen wird.
Mach window2 zur Membervariable, dann sollte alles gehen.
#include <gtkmm.h> class Klasse2 : public Gtk::Window { public: Klasse2() { set_default_size(500, 500); } }; class Klasse1 : public Gtk::Window { public: Klasse1() { startfenster2(); set_default_size(500, 500); this->show_all(); } private: Klasse2 window2; void startfenster2() //Wird später irgendwann ausgeführt { window2.show_all(); } }; int main (int argc, char *argv[]) { Gtk::Main kit(argc, argv); //Startet Gtk Main Klasse1 window1; Gtk::Main::run(window1); //startet Fenster }
-
Danke. Funktioniert super!!
Aber ich habe die Klasse2 in einer header-datei.
Also ist der Konstruktor so:
Klasse1::Klasse1()
{
set_default_size(500, 500);
}Nun kommt aber bei Klasse2 window2; der Error:
Klasse1.cpp:(.text+0x2cc): undefined reference to `Klasse2::Klasse2()'
-
Der Linker kann den default-konstructor von Klasse2 nicht finden...
-
Na klar!
Ich trottel
Ich muss das ja mitkompilieren!
Nochmals danke