gtkmm-Projekt zeigt nur leeres Fenster an



  • Hallo Community,
    ich habe folgendes KDevelop-Projekt:

    test.cc:

    #include <gtkmm.h>
    #include "main_window.hh"
    
    int main(int argc, char **argv)
    {  
       Gtk::Main m(&argc, &argv);
       main_window main_window;
       Gtk::Main::run(main_window);
       return 0;
    }
    

    main_window.h

    #ifndef _MAIN_WINDOW_HH
    #  include "main_window_glade.hh"
    #  define _MAIN_WINDOW_HH
    
    #include <gtkmm.h>
    
    class main_window : public main_window_glade
    {
    private:
    
    public: 
    
       main_window();
       bool quit(GdkEventAny *ev);
    };
    #endif
    

    main_window.cc:

    #include "config.h"
    #include <gtkmm.h>
    #include "main_window.hh"
    
    bool main_window::quit(GdkEventAny *ev)
    {  
    
       return 0;
    }
    
    main_window::main_window()
    {
       Gtk::Button m_button("hallo");
       Gtk::Label label("teschtlabel");
       Gtk::HBox box(true, 20);
       box.pack_start(label);
       box.pack_start(m_button);
    
       add(box);
       show_all_children();
       set_title("testfenster");
       //button.on_signal_clicked().connect
    
    }
    

    Leider werden mein Label und mein Button nicht angezeigt. Kann mir jemand sagen, wie ich das richtig mache?
    Das Tutorial hier habe ich gefunden, allerdings steige ich da nicht wirklich durch. Habe bisher eigentlich nur mit Borlands VCL gearbeitet, vielleicht bin ich da etwas zu "single track minded"...

    Danke
    Marc


  • Mod

    Schau dir doch mal die GTKmm Tutorials im Magazin an 🙂



  • Mach's mal so:

    #include <gtkmm.h>
    
    class main_window : public Gtk::Window
    {
    protected:
    
      Gtk::Button button;
      Gtk::Label label;
      Gtk::HBox box;
    
    public:
    
       main_window();
       bool quit(GdkEventAny *ev);
    };
    
    bool main_window::quit(GdkEventAny *ev)
    {  
    
       return 0;
    }
    
    main_window::main_window() : button("hallo"), label("tschtlabel")
    {
       set_title("testfenster");
    
       box.pack_start(label);
       box.pack_start(button);
    
       add(box);
    
       show_all_children();
    }
    
    int main(int argc, char **argv)
    {  
       Gtk::Main m(&argc, &argv);
       main_window my_main_window;
       m.run(my_main_window);
       return 0;
    }
    


  • Da du deine Variabeln im Konstruktor erstellst, werden sie danach auch wieder zerstört, und können nicht angezeigt werden.



  • @joomoo: Bestechende Logik, hätte ich auch drauf kommen können...
    @GPC: Danke, so funktioniert es. Allerdings ist mir die Syntax dieser Zeile absolut ungeläufig:

    main_window::main_window() : button("hallo"), label("tschtlabel")
    

    Gibt es eine Bezeichnung für diese Vorgehensweise? (Brauche was das ich googeln kann um mich fortzubilden (-; )

    Danke



  • Marc_hat_Frage schrieb:

    @GPC: Danke, so funktioniert es. Allerdings ist mir die Syntax dieser Zeile absolut ungeläufig:

    main_window::main_window() : button("hallo"), label("tschtlabel")
    

    Gibt es eine Bezeichnung für diese Vorgehensweise? (Brauche was das ich googeln kann um mich fortzubilden (-; )

    Du kannst nach "member initialization list" oder "Element initializer" googlen.


Anmelden zum Antworten