Glade Interface Designer: не удалось найти обработчик сигнала

Я зеленая рука в GTK. Я столкнулся с такой проблемой, когда использовал Glade Interface Designer для разработки пользовательского интерфейса.
Моя цель состоит в том, чтобы спроектировать два окна. И одна кнопка в main_window управляет внешним видом create_log_in_window.
Я добавил функцию ‘create_log_in_window’ и объект ‘main_window’ в Glade.
Однако кнопка не работает, когда я запускаю программу. И такое предупреждение появлялось.
Вот коды и предупреждения:

Gtk-WARNING: не удалось найти обработчик сигнала в ‘create_log_in_window’

#include <gtk/gtk.h>
int main (int argc, char *argv[]){

GtkBuilder      *builder;
GtkWidget       *main_window;

gtk_init (&argc, &argv);

builder = gtk_builder_new();
gtk_builder_add_from_file(builder,"main_window.glade", NULL);
main_window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));
gtk_builder_connect_signals(builder, NULL);
g_object_unref(G_OBJECT(builder));

gtk_widget_show_all(main_window);
gtk_main();

return 0;
}

gboolean create_log_in_window(GtkWidget *main_window){

GtkBuilder *builder;
GtkWidget  *window;

gtk_widget_hide_all(main_window);

builder = gtk_builder_new();
gtk_builder_add_from_file(builder,"log_in_window.glade",NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder,"log_in_window"));
gtk_builder_connect_signals(builder,NULL);
g_object_unref(G_OBJECT(builder));

gtk_widget_show_all(window);
return true;
}

1

Решение

Я сослался на много информации и наконец нашел что-то полезное на этом сайте: http://blog.csdn.net/xuesen_lin/article/details/6001114
Ключ в том, что мы должны определить нашу функцию особым образом, чтобы планшет мог найти адрес функции.
Может быть, мое описание неясно. Так что я покажу свой код.

#include <gtk/gtk.h>

typedef struct _MainDate{

GtkWidget *main_window;
GtkWidget *delete_button;

}MainDate;G_MODULE_EXPORT void delete_confirm_window( GtkButton *button, GtkWidget *popup ){

GtkBuilder *builder;
GtkWidget  *delete_window;
GError *error = NULL;

builder = gtk_builder_new();
if(!(gtk_builder_add_from_file(builder,"delete_window.glade",&error))){
g_warning("%s",error->message);
g_free(error);
return ;
}

delete_window = GTK_WIDGET(gtk_builder_get_object(builder,"delete_confirm_window"));
gtk_builder_connect_signals(builder,NULL);

g_object_unref(builder);

gtk_widget_show(delete_window);

}

int main(int argc,char *argv[]){

GtkBuilder *builder;
MainDate *date;
GError  *error = NULL;

gtk_init(&argc,&argv);

builder = gtk_builder_new();
if(!(gtk_builder_add_from_file(builder,"main_window.glade",&error))){
g_warning("%s",error->message);
g_free(error);
return 1;
}

date = g_slice_new(MainDate);

date->main_window =      GTK_WIDGET(gtk_builder_get_object(builder,"main_window"));
date->delete_button = GTK_WIDGET(gtk_builder_get_object(builder,"delete_popmenu"));

gtk_builder_connect_signals(builder,date);

g_object_unref(builder);

gtk_widget_show_all(date->main_window);

gtk_main();

g_slice_free(MainDate,date);

return 0;

}
0

Другие решения


По вопросам рекламы [email protected]