gtkmm Beispiel Programm "zu Fuß" (ohne Glade)



  • Wenn ihr wissen wollt wie man ein ganz einfache gtkmm Anwendung macht, hier ein beispiel:

    #include <gtkmm/Main.h>   // Für jede Anwendung benötigt um Gtk+ und Gtkmm zu intialisieren 
    #include <gtkmm/Button.h> // Für einen Button
    #include <gtkmm/Window.h> // Für ein Fenster 8)
    
    // Einfach von Gtk::Window erben
    struct MyWindow : public Gtk::Window 
    {
      MyWindow(); 
      Gtk::Button m_quit_button;     // Wir wollen mal einen Button
      void on_button_quit_clicked(); // Und das hier soll beim clicken ausgeführt werden
    };
    

    Soweit so gut, nun haben wir ein Fenster von Gtk::Window erben lassen und ein paar komponenten hinzugefügt, jetzt richten wir das Fenster einmal ein:

    MyWindow::MyWindow()
    : m_quit_button(Glib::locale_to_utf8("Quit")) // Button Beschriftung setzen
    {
      set_size_request( 200 , 100 ); // Setzen der Fenstergröße
    
      set_title(Glib::locale_to_utf8("Hello World")); // Titel / Caption setzen
    
      add(m_quit_button);  // Dem Fenster den Button zuordnen
    
      //Click Signal der Method on_button_quit_clicked() zu ordnen
    m_quit_button.signal_clicked().connect(sigc::mem_fun(*this,&MyWindow::on_button_quit_clicked));
    
      show_all(); // Alle show() bei allen childs und sich selbst rekursiv aufrufen 
    }
    
    // Signal 
    void MyWindow::on_button_quit_clicked()
    {
      hide();// Fenster schließen
    }
    

    Nun haben wir das Fenster fertig, nun noch die main()-Funktion fertig stellen und Gtk+/gtkmm Initialisieren.

    int main(int argc, char**argv)
    {
    // Um Standard Gtk+ Commandline Optionen zu garantieren werden die argumente zur Initialisierung mit übergeben
      Gtk::Main main_obj(argc,argv); 
    
      MyWindow window_obj;      // Eine Instanz unseres Spezialisierten Fensters
    
      main_obj.run(window_obj); // Starten der Anwendung
    
      return EXIT_SUCCESS;      // return 0 
    }
    

    Tada das wars auch schon. Wenn euch das gefallen hat schreib ich evtl. noch ein paar Beispiele zu anderen Themen, gebt einfach mal einwenig Feedback und macht auch ein paar Verbesserungvorschläge



  • m_quit_button.signal_clicked().connect(sigc::mem_fun(*this,&MyWindow::on_button_quit_clicked));
    

    WTF??



  • sigc::mem_fun(*this,&MyWindow::on_button_quit_clicked)
    

    Bildet einen Functor auf die Methode on_button_quit_clicked

    m_quit_button.signal_clicked().connect( sigc::mem_fun(*this,&MyWindow::on_button_quit_clicked) );
    

    Und hier wird eben der Functor auf die Methode an das clicked signal des buttons übergeben.



  • Das kann doch auch gleich in die FAQ. ➡



  • als anhang für die faq ein komplettes tutorial
    http://www.tu-chemnitz.de/informatik/friz/Grundl-Inf/GTKmm_Tutorial/public_html/Start_der_Webpraesenz/Deutsches_Tutorial/Frame/Einleitung/frame.htm
    http://www.tu-chemnitz.de/informatik/friz/Grundl-Inf/GTKmm_Tutorial/public_html/Download/Tutorial/tutorial_mit_beispiele.zip

    ps: habe es selber noch nicht gelesen aber vielleicht macht das ja mal einer und
    beurteilt es. im zweifelsfall könnte man es ja wieder aus der faq entferen.

    [edit]link



  • In dem Tutorial wird eine sehr alte Version verwendet ( < 2.4 ) aktuell ist 2.6.x <
    Das problem ist hauptsächlich das sich die API von 2.2 auf 2.4 geändert hat und von 2.4 auf 2.6 neue sachen hinzugekommen sind.

    Das englische Tutorial sollte trotzdem als erstes jedem nahe gelegt sein.

    http://gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/index.html



  • ja wie gesagt habe es nicht gelesen sondern nur vorgeschlagen, wenn dies
    nätürlich so ist dann wäre es falsch in faq zu stellen.



  • @miller_m: war kein Vorwurf, ich kannte das tutorial auch schon

    Ich werde evtuell ein paar Beiträge mehr schreiben zur aktuellen API.

    MFG



  • eViLiSSiMo schrieb:

    @miller_m: war kein Vorwurf, ich kannte das tutorial auch schon

    auch nicht so aufgefasst 😃



  • Ich würde das dann gleich 1:1 in die FAQ verschieben, damit wir da mal ein bisschen was drin haben, kann ja bei Gelegenheit auch überarbeitet werden; wer nicht zufrieden damit ist, spreche für jetzt, oder schweige für immer. 😉


Anmelden zum Antworten