gtkmm und themes



  • hi,
    ich habe begonnen mit gtkmm Oberflächen zu entwickeln,
    und tue dies unter ubuntulinux.
    nun frage ich mich wie es möglich ist, zu schaffen, dass meine Buttons etc.
    nicht so eckig aussehen sondern so wie der rest meines gnomes,
    also runde kanten etc... bei abderen anwendungen ist dies doch auch möglich.
    auch wenn ich beispielsweise mit glade eine oberfläche mache,
    und compiliere, sieht diese wunderschön aus.

    Nun möchte ich aber selbst programmieren und gtkmm also auf glade verzichten.

    Auch als ich zuvor gtk+ ohne mm benutze sah alles aus als könnte es tödlich sein, wenn man es an den kopf geworfen bekommt.

    Weiß jemand wie das geht?
    EDIT: also nicht jemanden mit buttons todwerfen,
    sondern runde dinge mit gtkmm amchen 😋

    Danke schonmal, Dahunger



  • DaHunger schrieb:

    auch wenn ich beispielsweise mit glade eine oberfläche mache,
    und compiliere, sieht diese wunderschön aus.

    Ja, echt scharfe Sache... aber vllt. schaust du mal nach, was Glade anders macht, als du. Eventuelle Unterschiede im Source-Code oder evtl. eine Art Manifest-Datei!?

    Mir selber ist das Problem etwas unbekannt, denn als ich z.B. meine gtkmm-Apps unter Xfce ausgeführt habe, haben sie das "native" Theme angenommen. Sah echt cool aus 😋 😉

    MfG

    GPC



  • Hallo

    Ich arbeite auch unter Ubuntu - Gnome. Bei mir wird alles so angezeigt wie der Rest des Desktops auch. Zeig doch mal ein bisschen Code... so können wir ev. was finden.

    Gruss

    Boxi



  • ok hier also mein *sehr komplexer* code:

    #include <iostream>
    #include <gtk--/button.h>
    #include <gtk--/main.h>
    #include <gtk--/window.h>
    #include <gtk--/box.h>
    
    using std::cout;
    using std::endl;
    
    using SigC::bind;
    using SigC::slot;
    
    class Fenster:public Gtk::Window{
    	private:
    		Gtk::Button button1;
    		Gtk::HBox meineHBox;
    	public:
    		Fenster();
    		void on_button1_clicked();	
    		void schliessen();	
    };
    
    Fenster::Fenster():Gtk::Window(GTK_WINDOW_TOPLEVEL),button1("Hallo?"){
    	set_title("Hallo Welt?");
    	set_border_width(10);
    	button1.set_border_width(10);
    	add(button1);
    	button1.clicked.connect(slot(this,&Fenster::on_button1_clicked));
    	button1.show();
    	destroy.connect(slot(this, &Fenster::schliessen));
    	show();
    }
    void Fenster::on_button1_clicked(){
    	cout << "Hallo Welt !!" <<endl;
    }
    void Fenster::schliessen(){
    	cout << "Tschüß Welt !!" <<endl;
    	Gtk::Main::quit();
    }
    
    int main(int argc, char* argv[]){
    	Gtk::Main kit(argc,argv);
    
    	Fenster fenster;
    	kit.run();
    
    	return (0);
    }
    

    compiliert wird das ganze dann mit

    g++ lektion2.cpp -o lektion2 `gtkmm-config --cflags --libs`
    


  • Darf man mal fragen, welche gtkmm-Version du hast? Denn die Zeit, als man gtk-- inkludierte, ist schon 'n bisschen vorbei 😉
    Dein Code (die includes in gtkmm geändert) passt sich nämlich meinem L&F an.



  • wenn ich gtkmm statt gtk-- nehme dann sagt er die libs könnte er nicht finden...

    version scheint 2.4 zu sein
    ich kann ja mal 2.0 deinstallieren... ich bezweifle aber eine wirkung



  • ok ich compiliere jetzt anders er sagt jetzt nicht mehr er fände die dateien nicht aber das hier:

    manuel@Santa-Cruz:~/gtkmm$ g++ lektion2.cpp -o lektion2 `pkg-config gtkmm-2.4 --cflags --libs`
    lektion2.cpp:13: error: ‘SigC::bind’ has not been declared
    lektion2.cpp:14: error: ‘SigC::slot’ has not been declared
    lektion2.cpp: In constructor ‘Fenster::Fenster()’:
    lektion2.cpp:26: error: no matching function for call to ‘Gtk::Window::Window(GtkWindowType)’
    /usr/include/gtkmm-2.4/gtkmm/window.h:215: note: candidates are: Gtk::Window::Window(Gtk::WindowType)
    /usr/include/gtkmm-2.4/gtkmm/window.h:177: note:                 Gtk::Window::Window(GtkWindow*)
    /usr/include/gtkmm-2.4/gtkmm/window.h:176: note:                 Gtk::Window::Window(const Glib::ConstructParams&)
    /usr/include/gtkmm-2.4/gtkmm/window.h:172: note:                 Gtk::Window::Window(const Gtk::Window&)
    lektion2.cpp:31: error: ‘((Fenster*)this)->Fenster::button1.Gtk::Button::clicked’ does not have class type
    lektion2.cpp:31: error: no match for call to ‘(sigc::slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>) (Fenster* const, void (Fenster::*)())’
    lektion2.cpp:33: error: ‘destroy’ was not declared in this scope
    lektion2.cpp:33: error: no match for call to ‘(sigc::slot<T_return, T_arg1, T_arg2, T_arg3, T_arg4, T_arg5, T_arg6, T_arg7>) (Fenster* const, void (Fenster::*)())’
    manuel@Santa-Cruz:~/gtkmm$
    


  • ok danke an alle es lag daran hab einiges noch geändert jetzt siehts wunderhübsch aus
    hab versucht die fehler zu beheben und das getan.
    Für alle dies interessiert hier der neue code:

    #include <iostream>
    #include <gtkmm/button.h>
    #include <gtkmm/main.h>
    #include <gtkmm/window.h>
    #include <gtkmm/box.h>
    
    using std::cout;
    using std::endl;
    
    class Fenster:public Gtk::Window{
    	private:
    		Gtk::Button button1;
    		Gtk::HBox meineHBox;
    	public:
    		Fenster();
    		void on_button1_clicked();	
    		void schliessen();	
    };
    Fenster::Fenster():button1("Hallo?"){
    	set_title("Hallo Welt?");
    	set_border_width(10);
    	button1.set_border_width(10);
    	add(button1);
    	button1.signal_clicked().connect(sigc::mem_fun(*this, &Fenster::on_button1_clicked) );
    	button1.show();
    	show();
    }
    void Fenster::on_button1_clicked(){
    	cout << "Hallo Welt !!" <<endl;
    }
    void Fenster::schliessen(){
    	cout << "Tschüß Welt !!" <<endl;
    	Gtk::Main::quit();
    }
    
    int main(int argc, char* argv[]){
    	Gtk::Main kit(argc,argv);
    
    	Fenster fenster;
    	kit.run(fenster);
    
    	return (0);
    }
    

    danke



  • Super, User die sich nach ner kleinen Idee selbst helfen können, sind doch immer noch die besten 👍 😉 :xmas2:



  • dankedanke (-;
    hab schon ne weile mit java gearbeitet
    is mir aber zu langsam...


Anmelden zum Antworten