我試圖創建一個簡單的應用程序,接受兩個整數並單擊顯示的兩個和「求和」按鈕Glade3和C編程
而且我是新來Glade3,所以你可以期待的失誤
/*
* Compile me with:
* gcc -o test test.c $(pkg-config --cflags --libs gtk+-2.0 gmodule-2.0)
*/
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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(項)」失敗分段故障(核心dumpe d)
'g_print(「Check point 1 \ n」); //幫助調試' 'input1 = gtk_entry_get_text(entry1); //從entry1獲取用戶數據' 'input2 = gtk_entry_get_text(entry2); //從入口2獲取用戶數據' 'g_print(「Check point 2 \ n」); //幫助debugging' 上檢查輸出我能找到的:「檢查點1」打印,但不是「檢查點2」,這說明存在一些線問題 '「輸入1 = gtk_entry_get_text(取值範) ; //從entry1獲取用戶數據「' – Jayzcode 2013-04-28 13:17:55
我打算寫出你正在聲明'GtkEntry * entry1',但從未真正從構建器獲取該構件。現在你已經改變了你的代碼在回調中傳入'entry1'。這甚至有可能嗎? – Mark 2013-04-28 14:47:38
這是一個複製粘貼錯誤。我後來意識到它。 – Jayzcode 2013-04-28 17:31:00