Glade3和C编程

我正在尝试创建一个接受两个整数的简单应用程序,并在单击“Sum”按钮时显示Sum of two

而且我是Glade3的新手,所以你可能会遇到错误

/* * Compile me with: * gcc -o test test.c $(pkg-config --cflags --libs gtk+-2.0 gmodule-2.0) */ #include  #include  #include  #include  GtkBuilder *builder; GtkWidget *window; GError *error = NULL; void on_button1_clicked(GtkButton *button1, GtkEntry *entry1, GtkEntry *entry2, GtkEntry *entry3 ) { const char *input1 = (const char *)malloc(20); const char *input2 = (const char *)malloc(20); char *result = (char *)malloc(20); int input1_int, input2_int, result_int; g_print ("Check point 1\n"); //to help debugging input1 = gtk_entry_get_text(entry1); //fetching user data from entry1 input2 = gtk_entry_get_text(entry2); //fetching user data from entry2 g_print ("Check point 2\n"); //to help debugging input1_int = atoi(input1); // String to Integer Conversion input2_int = atoi(input2); result_int = input1_int + input2_int; //Sum operation sprintf(result, "%d", result_int); gtk_entry_set_text(entry3, result); //Pushing result of Sum operation into Entry3 } void on_window1_destroy (GtkObject *object, gpointer user_data) { gtk_main_quit(); } int main( int argc, char **argv )` { /* Init GTK+ */ gtk_init( &argc, &argv ); /* Create new GtkBuilder object */ builder = gtk_builder_new(); /* Load UI from file. * Replace "sum.glade" with your saved project. */ if( ! gtk_builder_add_from_file( builder, "sum.glade", &error ) ) { g_warning( "%s", error->message ); g_free( error ); return( 1 ); } /* Get main window pointer from UI */ window = GTK_WIDGET( gtk_builder_get_object( builder, "window1" ) ); /* Connect signals */ gtk_builder_connect_signals( builder, NULL ); /* Destroy builder, since we don't need it anymore */ g_object_unref( G_OBJECT( builder ) ); /* Show window. All other widgets are automatically shown by GtkBuilder */ gtk_widget_show( window ); /* Start main loop */ gtk_main(); return( 0 ); } 

输出:检查点1

(测试:10082):Gtk-CRITICAL **:gtk_entry_get_text:断言`GTK_IS_ENTRY(条目)’失败分段错误(核心转储)

在此处输入图像描述

你在这里为回调函数传递’NULL’:

gtk_builder_connect_signals( builder, NULL );

还记得释放分配给* input1* input2* result的内存。

按钮点击信号的原型是错误的。 它应该是( 参考 ):

 void user_function (GtkButton *button, gpointer user_data) 

可能最好的选择是将构建器传递给回调并从那里检索条目小部件(在gtk_main之后取消它)或传递具有两个小部件的结构。