container problem mit gtk+



  • hi leute nun hab ich wieder ein kleines problem:
    ich habe folgenden code geschrieben:

    #include <gtk/gtk.h>
    
    GtkWidget *menue_top_handler(){
       static GtkWidget *menueLeiste;
       static GtkWidget *datei_mainLeistenEintrag,
                        *hilfe_mainLeistenEintrag;
       static GtkWidget *box_menueLeiste;
    
       box_menueLeiste = gtk_hbox_new (TRUE, 6);
    
       datei_mainLeistenEintrag = gtk_menu_item_new_with_label("Schtocht");
       hilfe_mainLeistenEintrag = gtk_menu_item_new_with_label("Helpschn");
    
       return menueLeiste;
    }/*end main*/
    
    int main (int argc, char *argv[]){
       GtkWidget *fenster;
    
       gtk_init (&argc, &argv);
       /*menueHandlerAufrufen*/
       menue_top_handler();
       fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    
       gtk_container_add(GTK_CONTAINER(fenster), menue_top_handler());
       gtk_widget_show_all(fenster);
       gtk_main ();
    }
    

    der code laesst sich auch fehlerfrei compilieren doch beim ausführen kommt immer die meldung

    (badCat:5482): Gtk-CRITICAL **: file gtkcontainer.c: line 949 (gtk_container_add): assertion `GTK_IS_WIDGET (widget)' failed
    

    und die menueleiste wird nicht angezeigt ein fenster wird jedoch geoeffnet!



  • gtk_container_add(GTK_CONTAINER(fenster), menue_top_handler());
    

    Ich tippe mal du castest falsch. so dürfte es funktionieren:

    gtk_container_add(GTK_WINDOW(fenster), menue_top_handler());
    


  • danke aber habs schon so funkts:

    #include <gtk/gtk.h>
    
    GtkWidget *menue_top_handler(){
       GtkWidget *menueLeiste;
       GtkWidget *datei_mainLeistenEintrag,
                 *hilfe_mainLeistenEintrag;
       GtkWidget *datei_menu,
                 *hilfe_menu;
       GtkWidget *oeffnen_eintrag,
                 *about_eintrag;
    
       menueLeiste = gtk_menu_bar_new();
       datei_mainLeistenEintrag = gtk_menu_item_new_with_label("Schtocht");
       hilfe_mainLeistenEintrag = gtk_menu_item_new_with_label("Helpschn");
       datei_menu = gtk_menu_new();
       hilfe_menu = gtk_menu_new();
    
       oeffnen_eintrag = gtk_menu_item_new_with_label("Oeffnen");
       about_eintrag = gtk_menu_item_new_with_label("About the HACKER!");
    
       gtk_menu_append(GTK_MENU (datei_menu), oeffnen_eintrag);
       gtk_menu_append(GTK_MENU (hilfe_menu), about_eintrag);
    
       gtk_menu_item_set_submenu(GTK_MENU_ITEM (datei_mainLeistenEintrag), datei_menu);
       gtk_menu_item_set_submenu(GTK_MENU_ITEM (hilfe_mainLeistenEintrag), hilfe_menu);
    
       gtk_menu_bar_append(GTK_MENU_BAR(menueLeiste), datei_mainLeistenEintrag);
       gtk_menu_bar_append(GTK_MENU_BAR(menueLeiste), hilfe_mainLeistenEintrag);
    
       return menueLeiste;
    }/*end main*/
    
    int main (int argc, char *argv[]){
       GtkWidget *fenster;
       GtkWidget *bar;
       GtkWidget *box_menueLeiste;
    
       gtk_init (&argc, &argv);
       /*menueHandlerAufrufen*/
       bar = menue_top_handler();
       fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    
       gtk_container_add(GTK_CONTAINER(fenster), bar);
       gtk_widget_show_all(fenster);
       gtk_main ();
    }
    


  • nun stellt sich fuer mich eine frage:
    warum gehts mit:

    gtk_container_add(GTK_CONTAINER(fenster), bar);
    

    und mit

    GtkWidget *box_menueLeiste;
    box_menueLeiste = gtk_hbox_new(TRUE, 9);
    gtk_box_pack_start (GTK_BOX(box_menueLeiste), bar, TRUE, TRUE, 9);
    

    nicht ??
    das ist mir ein raetsel kann mir das einer erklaeren???



  • Sorry, habe falsch getippt. Dein Fehler war das du menuLeiste keinen Speicher zugewiesen hattest. Und die in menue_top_handler() als static zu deklarieren war auch Blödsinn. Aber das hast du ja korrigiert wie ich sehe.



  • <Dein Fehler war das du menuLeiste keinen Speicher zugewiesen hattest. Und die in menue_top_handler() als static zu deklarieren war auch Blödsinn>

    tja das hab ich dan auch gemerkt aber das mit der box ist mir noch immer nicht ganz klar warum geht das mit dem container_add und das mit der box nicht?? oder habe ich noch was vergessen um das container widget box_menueLeiste anzuzeigen??


Anmelden zum Antworten