- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我刚开始使用 Gtk+,我正在按照本教程如何制作第一个应用程序,但是当我尝试运行可执行文件时,出现此错误:
Gtk-Critical **: gtk_widget_show assertion GTK_IS_WIDGET(WIDGET)
我可以在谷歌上看到很多人有同样的错误,但我看不到关于如何解决这个问题的回复..
我的 C 代码:
#include <stdlib.h>
#include <gtk/gtk.h>
GtkBuilder *builder;
GtkWidget *app;
G_MODULE_EXPORT
void on_app_destroy (void)
{
gtk_main_quit ();
}
G_MODULE_EXPORT
void on_menu_quit_activate (void)
{
gtk_main_quit ();
exit(EXIT_SUCCESS);
}
int main (int argc, char *argv[])
{
/* Initialize GTK+ */
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL);
gtk_init (&argc, &argv);
g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "tut.glade", NULL);
app = GTK_WIDGET (gtk_builder_get_object (builder, "app"));
gtk_builder_connect_signals (builder, NULL);
g_object_unref (G_OBJECT (builder));
/* Enter the main loop */
gtk_widget_show (app);
gtk_main ();
return 0;
}
高兴的文件:
<?xml version="1.0"?>
<glade-interface>
<!-- interface-requires gtk+ 2.16 -->
<!-- interface-naming-policy project-wide -->
<widget class="GtkWindow" id="window1">
<child>
<widget class="GtkFixed" id="fixed1">
<property name="visible">True</property>
<child>
<widget class="GtkButton" id="button1">
<property name="label" translatable="yes">button</property>
<property name="width_request">113</property>
<property name="height_request">42</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</widget>
<packing>
<property name="x">149</property>
<property name="y">69</property>
</packing>
</child>
</widget>
</child>
</widget>
<widget class="GtkWindow" id="window2">
<child>
<placeholder/>
</child>
</widget>
</glade-interface>
编译选项:
`pkg-config --cflags --libs gtk+-2.0` -export-dynamic
链接器设置:
-export-dynamic
我的 IDE:Code::Blocks,编译器:GNUC C 编译器
如何解决这个问题?提前致谢。
最佳答案
问题是在你的 glade 文件中没有 id 为 app
的对象。如果要显示窗口,则必须传递与窗口关联的 ID,即 window1
。因此,您的代码可以更改为:
app = GTK_WIDGET (gtk_builder_get_object (builder, "window1"));
if (NULL == app)
{
/* Print out the error. You can use GLib's message logging */
fprintf(stderr, "Unable to file object with id \"window1\" \n");
/* Your error handling code goes here */
}
还有一些其他的建议:
1. 最好在gtk_builder_add_from_file
调用中使用GError **
参数。因此,除了 gtk_builder_add_from_file
之外,还可以使用以下代码供您引用:
GError *err = NULL; /* It is mandatory to initialize to NULL */
...
if(0 == gtk_builder_add_from_file (builder, "tut.glade", &err))
{
/* Print out the error. You can use GLib's message logging */
fprintf(stderr, "Error adding build from file. Error: %s\n", err->message);
/* Your error handling code goes here */
}
...
2。从你的 glade 文件中,根元素 glade-interface
表明你正在使用 libglade
格式来保存你的 glade 文件而不是 GtkBuilder
格式。因此,您可能需要在构建中链接 libglade
。但是从 glade 文件中你表明 Gtk 版本是 2.16 或以上,你可能需要使用 GtkBuilder
格式。在这种情况下,您需要转换为 GtkBuilder
格式,这可以使用 gtk-builder-convert
完成。脚本或在 Glade 应用程序中打开 glade 文件并以 GtkBuilder
格式保存(此选项将取决于您的 Glade 版本)。
希望这对您有所帮助!
关于c - Gtk-关键 ** : gtk_widget_show assertion GTK_IS_WIDGET(WIDGET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8966420/
这是我在这里的第一篇文章,我创建这个帐户是因为我有点难过。我正在尝试练习将结构作为参数传递给回调,为此我在窗口中创建了一个带有按钮的简单程序。在第一次迭代中,按下标签为“Button 1”的按钮会将其
我刚开始使用 Gtk+,我正在按照本教程如何制作第一个应用程序,但是当我尝试运行可执行文件时,出现此错误: Gtk-Critical **: gtk_widget_show assertion GTK
我正在尝试访问 GTK Widget,现在该小部件的任何属性都可以,但我不断收到错误: Gtk-CRITICAL **: IA__FUNCTIONAME: assertion `GTK_IS_WIDG
静态构建我的 qt 应用程序之后 ./configure -static -debug-and-release -confirm-license -nomake demos -nomake exam
我有简单的 python3 + gtk3 代码,它连接到 dbus 并监听所有事件。当用户单击托盘中的图标时,他必须看到包含所有显示的早期事件的窗口。代码(我不知道问题出在哪里并且代码大小> 100行
我在使用 PyQt5 时遇到了这个错误,而且我认为只有在使用 QTextEdit 时才会遇到这个错误。我尝试使用 QLineEdit 代替 QTextEdit 并且它没有问题。当我打开程序时使用 QT
我已经创建了我认为最简单的 GTK 4 应用程序来创建一个带有菜单栏的窗口,该菜单栏在单击菜单项时激活 GAction。 #include #include #include static vo
每次我尝试将样式表应用于 QPushButton 时,我都会收到错误消息: (python:21347): Gtk-CRITICAL **: IA__gtk_widget_get_direction:
我正在编译并运行 gtk 应用程序,当我尝试在 hbox 中放置按钮时,我在运行时收到该错误。这个错误是什么意思/我该如何解决这个问题。当我通过终端运行它时,我得到了这个,并且当我按下运行此函数的按钮
我是一名优秀的程序员,十分优秀!