GTK+;,C++;,窗户,绑定到空地不工作
视窗10 文件GTK+;,C++;,窗户,绑定到空地不工作,gtk,Gtk,视窗10 文件GTK_GladeInWindowsSample.c由命令编译 $ gcc GTK_GladeInWindowsSample.c -o GTK_GladeInWindowsSample -mwindows `pkg-config --cflags --libs gtk+-3.0 gmodule-2.0` 文件GTK_GladeInWindowsSample.c #include <gtk/gtk.h> GtkWidget *win=NULL; GtkBuilder
GTK_GladeInWindowsSample.c
由命令编译
$ gcc GTK_GladeInWindowsSample.c -o GTK_GladeInWindowsSample -mwindows `pkg-config --cflags --libs gtk+-3.0 gmodule-2.0`
文件GTK_GladeInWindowsSample.c
#include <gtk/gtk.h>
GtkWidget *win=NULL;
GtkBuilder *builder=NULL;
GError *error=NULL;
GtkButton *button=NULL;
void clicked(GtkButton *button, gpointer user_data)
{
gtk_button_set_label(button, "clicked");
}
void destroy_(GtkWidget *object, gpointer user_data)
{
gtk_main_quit();
}
int main (int argc, char *argv[])
{
gtk_init(&argc, &argv);
builder=gtk_builder_new();
if(!gtk_builder_add_from_file(builder, "GTK_GladeInWindowsSample.glade", &error))
{
return 0;
}
win=GTK_WIDGET(gtk_builder_get_object(builder, "window1"));
button=GTK_BUTTON(gtk_builder_get_object(builder, "button1"));
gtk_widget_realize(win);
gtk_builder_connect_signals(builder, NULL);
gtk_widget_show_all(win);
g_object_unref(builder);
gtk_main();
return 0;
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<signal name="destroy" handler="destroy_" swapped="no"/>
<child>
<placeholder/>
</child>
<child>
<object class="GtkButton" id="button1">
<property name="label" translatable="yes">button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="margin_left">50</property>
<property name="margin_right">50</property>
<property name="margin_top">50</property>
<property name="margin_bottom">50</property>
<signal name="clicked" handler="clicked" swapped="no"/>
</object>
</child>
</object>
</interface>
当我按下按钮时,什么也没有发生(它应该将文本更改为“单击”)。销毁也不被称为检查以下文档: 编译Windows应用程序时,必须声明信号 使用G_模块_导出的回调,否则它们将不会放入符号中 桌子在Linux和Unices上,这是不必要的;申请应 而是使用-Wl、-export动态CFLAGS和 针对gmodule-export-2.0 因此,处理程序声明需要如下所示
G_MODULE_EXPORT void clicked(GtkButton *button, gpointer user_data)
或者对每个回调函数调用gtk\u builder\u add\u callback\u symbol()