【问题标题】:Unable to connect signal and signal handler in Glade GTK+3无法在 Glade GTK+3 中连接信号和信号处理程序
【发布时间】:2015-03-11 21:55:32
【问题描述】:

您好,我正在 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

我正在使用带有 GCC 编译器的 Code ::Blocks 13.12。

这是我的代码:

#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;
}

【问题讨论】:

    标签: c gtk gtk3 glade


    【解决方案1】:

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

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

    【讨论】:

    • 太棒了!有效。我相信它是在 gtk+-3 中添加的,因为使用 gtk+-2.0 不需要调用 gtk_builder_add_callback_symbol()。
    【解决方案2】:

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

    > gcc pkg-config --cflags gtk+-3.0 -o kaczka kaczka.c pkg-config --libs gtk+-3.0

    > ./kaczka

    (kaczka:31686): Gtk-WARNING **: 找不到信号处理程序“on_destroy”。你是用 -rdynamic 编译的吗?

    > gcc pkg-config --cflags gtk+-3.0 -o kaczka kaczka.c pkg-config --libs gtk+-3.0 -rdynamic

    > ./kaczka

    没有警告。

    【讨论】:

      【解决方案3】:

      您可以添加更多的编译器设置,

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

      如果有人正在用介子构建程序,只需添加

      gmoddep = dependency('gmodule-2.0')

      到依赖列表。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多