无法连接Glade GTK + 3中的信号和信号处理程序

时间:2015-01-13 20:14:01

标签: c gtk gtk3 glade

您好我正在使用Ubuntu 14.04 LTS上的GTK + 3项目。我正在尝试使用Glade,但当我尝试将切换按钮的“切换”信号连接到一个名为kaczka的函数时,编译后我在控制台中得到了这个:(Gra_w_Statki:11072): Gtk-Warning**:Could not find signal handler 'kaczka. Did you compile with -rdynamic?

窗口和按钮呈现自身并正常工作,除了切换按钮不会改变任何东西。我做错了什么?

这就是我尝试连接切换按钮和功能Click!

的方法

我的链接设置为:pkg-config --libs gtk+-3.0

我的编译器设置为:pkg-config --cflags gtk+-3.0

我正在使用Code :: Blocks 13.12和GCC编译器。

这是我的代码:

#include <stdlib.h>
#include <gtk/gtk.h>
void kaczka (GtkToggleButton *tbutton, gpointer data)
{
    gtk_main_quit ();
}


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

  gtk_init (&argc, &argv);


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

    win=GTK_WIDGET(gtk_builder_get_object(builder,"window1"));


gtk_builder_connect_signals( builder, NULL );
g_object_unref( G_OBJECT( builder ) );



  gtk_widget_show_all (win);
  gtk_main ();
  return 0;
}

5 个答案:

答案 0 :(得分:4)

查看gtk_builder_connect_signals()gtk_builder_add_callback_symbol()文档。基本上你需要

  • 在连接信号之前对所有回调使用gtk_builder_add_callback_symbol()
  • 与gmodule-export-2.0链接并使用编译标志&#34; -Wl, - export-dynamic&#34;导出甚至未使用的符号。

答案 1 :(得分:1)

您可以使用

添加更多编译器设置

pkg-config --libs --cflags gmodule-2.0

如果有人用meson构建程序,只需添加

gmoddep = dependency('gmodule-2.0')

列出依赖项。

答案 2 :(得分:0)

添加-rdynamic以导出该函数并使其可见 到装载机。

  

&GT; gcc pkg-config --cflags gtk+-3.0 -o kaczka kaczka.c pkg-config --libs gtk+-3.0

     

&GT; ./kaczka

(kaczka:31686):Gtk-WARNING **:无法找到信号处理程序'on_destroy'。你用-rdynamic编译了吗?

  

&GT; gcc pkg-config --cflags gtk+-3.0 -o kaczka kaczka.c pkg-config --libs gtk+-3.0 -rdynamic

     

&GT; ./kaczka

没有警告。

答案 3 :(得分:0)

我遇到了同样的问题,一位好心人帮我解决了这个问题。 Here 你可以从他那里找到答案。只需使用 extern "C" {//put your handlers here} 块。

答案 4 :(得分:-1)

我认为你的kaczka.glade可能会出错。

我使用了您的.c源文件并创建了自己的.glade,并且运行良好。

你正在尝试使用什么版本的Glade?

运行最新版本,看它是否解决了问题。