2015-01-13 5 views
3

Привет, я работаю над проектом в GTK + 3 на Ubuntu 14.04 LTS. Я пытаюсь использовать Glade, но когда я попытался подключить «переключенный» сигнал кнопки переключения к функции, называемой kaczka, после компиляции я получил это в своей консоли: (Gra_w_Statki:11072): Gtk-Warning**:Could not find signal handler 'kaczka. Did you compile with -rdynamic?Невозможно подключить сигнал и обработчик сигналов в Glade GTK + 3

Окно и кнопка рендеринга и работать нормально, за исключением того, что кнопка переключения ничего не меняет. Что я делаю не так ?

Это, как я пытался подключить кнопки переключения и функции Click!

Мои Linker Настройки являются: 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; 
} 

ответ

3

Посмотрите на документацию gtk_builder_connect_signals() и gtk_builder_add_callback_symbol(). В основном вам нужно либо

  • использования gtk_builder_add_callback_symbol() на все обратные вызовы перед подключением сигналов или
  • связи с GModule-экспортом-2.0 и использовать компилировать флаги «-Wl, - экспорт-динамический» экспортировать даже неиспользуемые символы ,
+0

отлично! Это сработало. Я полагаю, что это было добавлено в gtk + -3, потому что с помощью gtk + -2.0 не было необходимости вызывать gtk_builder_add_callback_symbol(). – douglasjfm

-1

Я думаю, что ваш kaczka.glade может ошибаться.

Я использовал ваш исходный файл .c и создал свой собственный .glade, и он прошел хорошо.

Какую версию Glade вы пытаетесь?

Запустить последнюю версию и посмотреть, разрешает ли она проблему.

0

Добавить -rdynamic, чтобы экспортировать функцию и сделать ее видимой загрузчику.

> НКУ pkg-config --cflags gtk+-3.0 -o Kaczka kaczka.c pkg-config --libs gtk+-3.0

> ./kaczka

(Kaczka: 31686): Gtk-WARNING **: Не удалось найти обработчик сигнала 'on_destroy' , Вы скомпилировали с -rdynamic?

> НКУ pkg-config --cflags gtk+-3.0 -o Kaczka kaczka.c pkg-config --libs gtk+-3.0 -rdynamic

> ./kaczka

Нет предупреждения.

1

Вы можете добавить дополнительные параметры компилятора с,

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

Если кто-то строит программу с мезона, просто добавьте

gmoddep = dependency('gmodule-2.0')

в список зависимостей.

Смежные вопросы