【发布时间】:2017-08-18 09:17:23
【问题描述】:
我尝试在 Linux 上使用 C 和 Glade 制作一个简单的 Gui 程序。 我写了一个简单的程序并用 Glade 设计了一个窗口。 当我运行代码时,它说:
(gtk-test:23026): Gtk-CRITICAL **: gtk_widget_show: assertion ‘GTK_IS_WIDGET(widget)’ failed
而且没有打开任何窗口。 我在互联网上搜索了一下,但没有任何帮助。有人说我必须将 glade 文件转换为 .xml,但这没有用。
C
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
gtk_init(&argc, &argv);
builder = gtk_builder_new();
gtk_builder_add_from_file (builder, "window_main.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
gtk_builder_connect_signals(builder, NULL);
g_object_unref(builder);
gtk_widget_show(window);
gtk_main();
return 0;
}
void on_window_main_destroy()
{
gtk_main_quit();
}
林间空地
<?xml version=1.0 encoding="UFT-8"?>
<!-- Generated with glade 3.18.3 -->
<interface>
<requires lib="gtk+" version="3.12"/>
<object class="GtkWindow" id="window_main">
<property name="can_focus">False</property>
<property name="title" translatable="yes">Test Window</property>
<property name="default_width">640</property>
<property name="default_height">480</property>
<signal name="destroy" handler="on_window_main_destroy" swapped="no"/>
<child>
<placeholder/>
</child>
</object>
</interface>
【问题讨论】:
-
UFT-=>UTF -
正如José所说,一旦你加载了没有
GError的文件,你还应该检查gtk_builder_get_object()的返回值是否为NULL,表示失败查找,当然会无法断言它是有效的GtkWidget *。在这种情况下,它可能会失败,因为文件根本没有成功加载,但您至少应该验证查找是否成功,至少在您巩固.ui文件的结构并知道它总是会成功之前。错误检查的存在是有原因的 - 不要只是推倒它并期望一切正常。 -
我将使用 GError 示例和@underscore_d 正确指示检查结果 og builder 获取对象函数/方法来更新答案。