libglade zeigt leeres Fenster statt GUI an



  • Moin,

    ich bin noch recht neu in der Linux-Programmiererwelt und habe gerade erst angefangen, mit GTK-- herumzuspielen. Da Glade in Anjuta integriert ist, ist das im Prinzip auch kein Problem. Dummerweise findet meine wunderschöne GUI keine Anwendung, sondern wird beim Starten des Programms durch ein leeres 200x200 Pixel großes Fenster ersetzt. Zuerst dachte ich, ich hätte den Dateinamen falsch angegeben, doch dem ist nicht so. Die .glade XML Datei sieht soweit ich das sagen auch noch ganz frisch aus.

    Hier der Code aus main.cc:

    #include <gtkmm.h>
    #include <glade/glade.h>
    
    int main(int argc, char **argv)
    {
        GladeXML *xml;
        GtkWidget *widget;
    
        gtk_init(&argc, &argv);
        xml = glade_xml_new("/home/nik/development/gtk_learning/src/window.glade", 
    						NULL, NULL); // ich weiß, ich weiß
    
        glade_xml_signal_autoconnect(xml);
    
        gtk_main();
    
        return 0;
    }
    

    Konfiguration:
    Ich verwende Ubuntu 7.04,
    Anjuta Ver. 2.2.2,
    libglade-2.0 Ver. 2.6.0 und
    gtkmm-2.4 Vers. 2.10.8

    Hat jemand eine Ahnung, was hier falsch läuft?
    Schonmal danke für die Hilfe und bis dann,
    anytime


  • Mod

    Du erstellst ja auch eigentlich kein Fenster, sondern nur ein GLadeXML Objekt, ka. ob das schon für GTK reicht.
    GtkWidget *widget benutzt du jedenfalls nicht.

    Evtl. schaust du dir mal die Artikel zu GTKmm im Magazin an 🙂



  • Jo, stimmt. Das Problem konnte ich inzwischen auch lösen (oder die... u.a. Fehler im makefile).
    Nächstes Problem:

    libglade findet meinen signal handler nicht.
    Bei Glade habe ich on_button_clicked angegeben und in main.cc

    void on_button_clicked(GtkButton *button,gpointer user_data)
    {	
    	Gtk::MessageDialog dia(NULL,"You clicked me. Great!");
        dia.run(); 
    }
    

    .

    Wieso funktioniert das so nicht? Muss ich noch was mit der Funktion machen damit libglade damit klarkommt?



  • Was für eine schräge Mischung aus GTK+ und gtkmm programmierst du da eigentlich?



  • ich hab keine ahnung. irgendwie scheint es auch keine wirklich gescheite dokumentation mit brauchbarem tutorial zu geben. gtk+, kein problem, gtkmm auch nicht, aber mit glade-2 und gtkmm ohne gnome wirds kompliziert.



  • Na ja, ich benutze kein glade (weil untrue), aber warum versuchst du es nicht mal _ohne_ Glade. Einfach reines gtkmm oder GTK+ (je nach dem, was für dich eher geeignet ist), da lernst du auch deutlich mehr über das GUI Toolkit.



  • hm... kann man natürlich so sehen, aber ich denke nicht dass ich davon etwas lernen würde, das gui in c++ zu schreiben anstatt in ne xml datei auszulagern wie es sich gehört. aber ich habe jetzt ein paar gute quellen gefunden und bin schon ein ganzes stück schlauer.
    trotzdem danke für diesen weisen ratschlag.



  • die bereits im glade-xml definierten callbacks können auch im gtkmm geladen werden. einfach das zugehörige g_object "erzeugen" und... hurra:

    #include <gtkmm.h>
    (...)
    #include <glade/glade.h>
    (...)
    Glib::RefPtr<Gnome::Glade::Xml> test;
    test = Gnome::Glade::Xml::create("test.glade");
    (...)
    GladeXML *test_gtk;
    test_gtk =  test->gobj();
    glade_xml_signal_autoconnect(test_gtk);
    

    ps: in meinem fall (onscreen-keyboard, alle buttons haben selbes callback) funkt es derart, interessant wäre eine (reine) c++ funktion in der art "for each button on widget ... connect ..."


Anmelden zum Antworten