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??