2013-03-11 26 views
1

我是Glade的初學者,但在C編程方面有經驗。Glade 3和C,按鈕和文本框的信號處理

我想建立一個接受兩個值並顯示總和的項目。

我已經使用下列內容:

textbox1 - (entry1) ---- for first value, 
textbox2 - (entry2) ---- for 2nd value, 
textbox3 - (entry3) ---- to display result, 
button - (button1) ---- to calculate sum, 
signal - (on_button1_clicked) ---- to handle sum function. 

請幫助我的信號碼。

#include <gtk/gtk.h> 
#include <stdio.h> 

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

void on_button1_clicked 
{ 

// Need Help in this section 

} 

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. If error occurs, report it and quit application. 
    * Replace "tut.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); 
} 

Sample code image

+2

那麼是什麼問題呢? – hyde 2013-03-11 10:55:21

回答

1

我嘗試了一些東西,並有一些幫助可以使它工作。這裏是你需要參考的內容Click

0

我不會告訴你到底該怎麼做,而是通過你的問題的思維邏輯:你需要

  1. 獲取文本出來的entry1entry2
  2. 將字符串轉換爲整數。
  3. 添加在一起
  4. 答案轉換爲字符串
  5. 設置文本上entry3

我敢肯定,你可以找到一些有用的功能做的這個GTK +的部分文檔中: GtkEntry documentation

1
#include <gtk/gtk.h> 
#include<stdio.h> 
#include<stdlib.h> 
#include <string.h> 

/*i have grouped all the widgets in one structure. this technique will 
help if you have huge number of windows in your project. 
as the number of window will increase the variable we declare will increase 
and the declared variables can have same name of different windows */ 
struct login_window 
{ 
    GtkEntry *e1;//textbox1 
    GtkEntry *e2;//textbox2 
    GtkEntry *e3;//textbox3 
}; 
typedef struct login_window widgets; 


G_MODULE_EXPORT void on_window1_destroy() 
{ 
    gtk_main_quit(); 
} 


G_MODULE_EXPORT void on_button1_clicked (GtkButton *button,widgets *widg) 
{ 
    char ch1[5],ch2[5],ch[5]; 
    int a; 
//getting text from the text boxes 
const gchar *text1 = gtk_entry_get_text(widg->e2); 
const gchar *text2 = gtk_entry_get_text(widg->e1); 

//copying the text of textbox into an array 
strcpy(ch1,text1); 
strcpy(ch2,text2); 

//converting characters to integer and adding them 
a=(atoi(ch1))+(atoi(ch2)); 

itoa(a,ch,5);//converting integer to character 
gtk_entry_set_text (widg->e3,ch);//setting or displaying text(output) to the third text box 
} 

int main(int argc, char *argv[]) 
{ 
    GtkBuilder *gtkBuilder; 
    widgets widg; 
    GtkWidget *window; 

    gtk_init(&argc, &argv); 
    gtkBuilder = gtk_builder_new(); 

    gtk_builder_add_from_file(gtkBuilder, "window.glade", NULL); 


    window = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "window1")); 

//connecting each structure member to it appropriate gtkwidget 
    widg.e1 = GTK_ENTRY(gtk_builder_get_object(gtkBuilder, "entry1")); 
    widg.e2 = GTK_ENTRY(gtk_builder_get_object(gtkBuilder, "entry2")); 
    widg.e3 = GTK_ENTRY(gtk_builder_get_object(gtkBuilder, "entry3")); 

/*connecting signals so that appropriate handlers can be called when button is clicked*/ 
    gtk_builder_connect_signals(gtkBuilder, &widg); 

    g_object_unref(G_OBJECT(gtkBuilder)); 
    gtk_widget_show(window);//showing the window 
    gtk_main(); 

    return 0; 
} 
+0

在顯示代碼之前添加一些解釋可能會比較謹慎,以免看起來不那麼嚇人。我意識到,解釋是你的意見,但某種形式的介紹不會錯。 – rayryeng 2014-10-15 20:54:31