2014-06-12 21 views
0

这是我使用glade文件构建菜单的Gtk + 2应用程序的代码。 但是,当我编译我的软件,它会生成以下错误:Gtk + 2 Glade运行时错误无法构建小部件

GTK的CRITICAL **:IA__gtk_builder_get_object:断言GTK_IS_BUILDER (builder)' failed Gtk-CRITICAL **: IA__gtk_widget_show: assertion GTK_IS_WIDGET(插件)”失败

drgeoToolbar::drgeoToolbar (geoView *view): 
drgeoControl (view) 
{ 
    GError* error = NULL; 
    GtkBuilder *xml = gtk_builder_new(); 
    GtkWidget *w; 

    // Build the toolbars 

    // take a reference of each bar item so we can : 
    // . adjust their sensitivity 
    // . attach a referecence of this class instance 


    if (!gtk_builder_add_from_file (xml, DRGEO_GLADEDIR "/drgeo2.glade", &error)) 
    { 
    g_warning ("Couldn't load builder file: %s", error->message); 
    g_error_free (error); 
    } 
    setTopControlerWidget (xml); 

    fetchWidgetParent (xml,&p_toolbar, "menuBar", 
     (gpointer) this); 
    fetchWidgetParent (xml,&p_zoomEntry, "zoomEntry", 
     (gpointer) this); 
    gtk_entry_set_text (GTK_ENTRY (p_zoomEntry), "100%"); 
    gtk_builder_connect_signals (xml, &error); 
    g_object_unref (G_OBJECT (xml)); 


    /* short cut bar */ 

    setShortcutControlerWidget (xml); 
    fetchWidgetParent (xml,&p_shortcutBar, "shortcutBar", 
     (gpointer) this); 
    gtk_builder_connect_signals (xml, &error); 
    g_object_unref (G_OBJECT (xml)); 



    gtk_builder_connect_signals (xml, &error); 
    setPointControlerWidget (xml); 
    fetchWidgetParent (xml,&p_pointBar, "pointBar", 
     (gpointer) this); 
    w = GTK_WIDGET (gtk_builder_get_object(xml, "toolbar")); 
    gtk_toolbar_set_tooltips (GTK_TOOLBAR (w), true); 
    g_object_unref (G_OBJECT (xml)); 

    gtk_builder_connect_signals (xml, &error); 
    setCurveControlerWidget (xml); 
    fetchWidgetParent (xml,&p_curveBar, "curveBar", 
     (gpointer) this); 
    g_object_unref (G_OBJECT (xml)); 

    gtk_builder_connect_signals (xml, &error); 
    setTransformationControlerWidget (xml); 
    fetchWidgetParent (xml,&p_transformationBar, 
     "transformationBar", 
     (gpointer) this); 
    g_object_unref (G_OBJECT (xml)); 

    gtk_builder_connect_signals (xml, &error); 
    setNumericControlerWidget (xml); 
    fetchWidgetParent (xml,&p_numericBar, "numericBar", 
     (gpointer) this); 
    g_object_unref (G_OBJECT (xml)); 

    gtk_builder_connect_signals (xml, &error); 
    setMacroControlerWidget (xml); 
    fetchWidgetParent (xml,&p_macroBar, "macroBar", 
     (gpointer) this); 
    g_object_unref (G_OBJECT (xml)); 

    gtk_builder_connect_signals (xml, &error); 
    setOtherControlerWidget (xml); 
    fetchWidgetParent (xml,&p_otherBar, "otherBar", 
     (gpointer) this); 
    g_object_unref (G_OBJECT (xml)); 

} 

任何想法我怎么能解决这个?

回答

1

看看第一个错误信息。你可以在建造者处拨打g_object_unref()(甚至多次),然后继续使用建造者。

删除除最后一个unref呼叫以外的所有信息。电话gtk_builder_connect_signals()也一样。

+0

工具栏仍未绘制。 '#0 0x00007ffff6da9410 in g_log()from /lib/x86_64-linux-gnu/libglib-2.0.so.0 #1 0x0000000000437fca in drgeoToolbar :: drgeoToolbar(this = 0xf3c010, view = <优化出来>)at drgeo_toolbar .cc:42' 这是使用gdb的回溯结果,在我做了你的建议后。它仍然坠毁。行号42是行 'g_warning(“无法加载生成器文件:%s”,错误 - >消息);' –

+0

声音像xml文件不是你认为它的地方。作为一般性评论:代码中存在几个潜在问题......我建议您从尽可能最小的代码开始(如从文件创建构建器),并且只有在您完成所有错误处理后才添加新内容(包括返回在错误路径中)以及为该部分完成的测试。 – jku

相关问题