[gtkmm] Assistant aus Applikation starten?
-
Hallo,
ich habe folgendes Problem:
Innerhalb einer Applikation soll ein Assistant gestartet werden nach einem klick auf einen Button.Als Beispiel habe ich bisher nur eine Anwendung gefunden, die als Assistant gestartet wird. Dort wird der Assistant direkt mit
Gtk::Main kit(argc, argv); kit.run(assistant)
gestartet.
Da der Gtk::Assistant keine
run()
-Methode besitzt lässt sich dieser nicht gezielt starten, der Effekt, den ich in meineron_btn_clicked()
-Methode habe ist, dass beim Erzeugen des Assitant-Objekts der Assistant direkt angezeigt wird. Leider wartet dann die Applikation nicht bis der Assistant beendet wird. (Geht an der Stelle ja auch nicht, da der C'tor ja keinen Return-Wert liefern kann.)void MyClass::on_btn_clicked() { MyAssistant my_assistant; // hier wird sofort der Assistent angezeigt m_val1 = my_assistant.getVal1(); // liefert Schrott, da der Assistent noch nicht durchlaufen ist }
Nun die Frage, wie verwende ich einen Assistenten innerhalb einer Anwendung, z.B. beim hinzufügen von neuen Artikeln in eine Liste?
Viele Grüße
Assistant
-
Hi,
kannst du ein kurzes, lauffähiges und zu kompilierendes Codestück posten? Dann kann ich's mir anschauen.
Cheers
GPC
-
Hallo,
hier ist ein minimales Beispiel:
#include <gtkmm.h> class assistant : public Gtk::Assistant { public: assistant() :m_btn("click me!") { set_title("My Assistant"); set_default_size(300, 400); append_page(m_btn); set_page_type(m_btn, Gtk::ASSISTANT_PAGE_INTRO); set_page_title(m_btn, "First Page"); show_all(); }; virtual ~assistant() {}; protected: Gtk::Button m_btn; }; class tool : public Gtk::Window { public: tool() :m_btn("click me") { set_title("My Tool"); m_btn.signal_clicked().connect(sigc::mem_fun(*this, &tool::on_btn_clicked)); add(m_btn); show_all(); }; virtual ~tool() {}; protected: virtual void on_btn_clicked() { assistant my_assistant; Gtk::MessageDialog("This should be shown when assistant finished").run(); }; Gtk::Button m_btn; }; int main(int argc, char* argv[]) { Gtk::Main kit(argc, argv); tool my_tool; kit.run(my_tool); }
Der aktuelle Stand ist, dass ich meiner Meinung nach komplett falsch lag mit meiner Vermutung. Dadurch dass in meiner Anwendung nach dem Erzeugen des Assistenten immer ein Dialog folgt wird dieser gestartet, mich hatte es verwundert wie der Startvorgang vollzogen wird. (siehe Zeile 31 und 32)
Wenn ich es nun richtig überblicke ist das Problem, das starten des Assistenten innerhalb der Anwendung, da ja keine run()-Methode vorhanden ist. Hier wird er wegen dem folgenden Dialog gestartet, was so nicht beabsichtigt warAuch weiteres googeln hat mich noch nicht weiter gebracht den Assistenten zu starten. Über Tipps wäre ich dankbar.
Viele Grüße
Assistant
-
Hi,
Zeilen 19 und 36 sind neu, ansonsten alles beim Alten.
#include <gtkmm.h> class assistant : public Gtk::Assistant { public: assistant() :m_btn("click me!") { set_title("My Assistant"); set_default_size(300, 400); append_page(m_btn); set_page_type(m_btn, Gtk::ASSISTANT_PAGE_INTRO); set_page_title(m_btn, "First Page"); show_all(); }; virtual ~assistant() {}; protected: Gtk::Button m_btn; virtual void on_cancel() { Gtk::Main::quit(); } }; class tool : public Gtk::Window { public: tool() :m_btn("click me") { set_title("My Tool"); m_btn.signal_clicked().connect(sigc::mem_fun(*this, &tool::on_btn_clicked)); add(m_btn); show_all(); }; virtual ~tool() {}; protected: virtual void on_btn_clicked() { assistant my_assistant; Gtk::Main::run(my_assistant); Gtk::MessageDialog("This should be shown when assistant finished").run(); }; Gtk::Button m_btn; }; int main(int argc, char* argv[]) { Gtk::Main kit(argc, argv); tool my_tool; kit.run(my_tool); }
So läuft das bei mir sauber durch... beim Klick auf den Button kommt der Assi und wenn ich den dann mittels Cancel-Button kille, kommt die MessageBox.
Cheers
GPC
-
Wow, Danke Dir!
Das wars, ich habe zwar gesucht wo ich den Assistent reinpacken kann um eine run()-Methode zu bekommen, jedoch habe ich nicht daran gedacht, dass ich eine weitere Main-Loop starten kann.
Gruß
Assistant