gtk glade助手:破坏信号问题

gtk glade助手:破坏信号问题,gtk,gtk3,glade,Gtk,Gtk3,Glade,生成一个简单的glade,打开一个信号后,我想将它与我的.c连接,以应用销毁信号,但总是得到异常 “在\u窗口\u主\u销毁上找不到信号处理程序” 有人能找出问题出在哪里吗 这是我的c代码 #include <gtk/gtk.h> GtkWidget *g_lbl_hello; GtkWidget *g_lbl_count; int main(int argc, char *argv[]) { GtkBuilder *builder; GtkWidget

生成一个简单的glade,打开一个信号后,我想将它与我的
.c
连接,以应用销毁信号,但总是得到异常

“在\u窗口\u主\u销毁上找不到信号处理程序”

有人能找出问题出在哪里吗

这是我的c代码

#include <gtk/gtk.h>
GtkWidget *g_lbl_hello;
GtkWidget *g_lbl_count;

int main(int argc, char *argv[])
{
    GtkBuilder      *builder;
    GtkWidget       *window;

    gtk_init(&argc, &argv);

    builder = gtk_builder_new();
    gtk_builder_add_from_file (builder, "windows_main.glade", NULL);

    window = GTK_WIDGET(gtk_builder_get_object(builder, "windows_main"));

    // get pointers to the two labels
    g_lbl_hello = GTK_WIDGET(gtk_builder_get_object(builder, "lbl_hello"));
    g_lbl_count = GTK_WIDGET(gtk_builder_get_object(builder, "lbl_count"));
    gtk_builder_connect_signals(builder, NULL);
    //g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window));

    g_object_unref(G_OBJECT(builder));

    gtk_widget_show_all(window);
    gtk_main();

    return 0;
}

// called when button is clicked

void on_btn_hello_clicked()
{
    static unsigned int count = 0;
    char str_count[30] = {0};

    gtk_label_set_text(GTK_LABEL(g_lbl_hello), "Hello, world!");
    count++;
    sprintf(str_count, "%d", count);
    gtk_label_set_text(GTK_LABEL(g_lbl_count), str_count);
}

// called when window is closed
void on_window_main_destroy()
{
    gtk_main_quit();
}
#包括
GtkWidget*g_lbl_你好;
GtkWidget*g_lbl_计数;
int main(int argc,char*argv[])
{
GtkBuilder*builder;
GtkWidget*窗口;
gtk_init(&argc,&argv);
builder=gtk_builder_new();
gtk_builder_从_文件添加_(builder,“windows_main.glade”,NULL);
window=GTK_小部件(GTK_builder_get_对象(builder,windows_main));
//获取指向这两个标签的指针
g_lbl_hello=GTK_小部件(GTK_builder_get_对象(builder,lbl_hello));
g_lbl_count=GTK_小部件(GTK_builder_get_对象(builder,lbl_count));
gtk_builder_connect_信号(builder,NULL);
//g_信号连接交换(g_对象(窗口),“销毁”,g_回调(gtk_主退出),g_对象(窗口));
g_object_unref(g_object(builder));
gtk_小部件_全部显示(窗口);
gtk_main();
返回0;
}
//单击按钮时调用
点击()时无效
{
静态无符号整数计数=0;
字符stru计数[30]={0};
gtk_标签_集合_文本(gtk_标签(g_lbl_hello),“hello,world!”);
计数++;
sprintf(str_计数,“%d”,计数);
gtk_标签设置文字(gtk_标签(g_lbl_计数)、str_计数);
}
//窗口关闭时调用
窗口上的无效\u主\u销毁()
{
gtk_main_quit();
}
这是我的林间空地


您似乎正在使用MS Windows。如果是这样,则文档中明确说明:

编译Windows应用程序时,必须声明信号 使用G_模块_导出的回调,否则它们将不会放入符号中 桌子

在回调模块前面加上
G\u MODULE\u EXPORT

G_MODULE_EXPORT void on_btn_hello_clicked()
{
...
}

G_MODULE_EXPORT void on_window_main_destroy()
{
...
}

PS:您可能需要将
gmodule-2.0
添加到依赖项中。

请将您的glade文件作为文本发布。照片几乎一文不值。