2012-05-28 102 views
0

我已經填充了包含4列的表格。第一列是填充了循環的複選框。事實上,所有列都填充了一個循環。第二列是文本輸入項[x] [y],其中x是行&。所以這就是我想要做的。當您選中第1行復選框(複選框[y])時,我想更改第2列第1行(條目[x] [y])中輸入框的文本顏色。我知道答案很簡單,但沒有回答。想法?基於複選框更改輸入框中的文本(GTK +)

+0

哪部分需要幫助? – ptomato

回答

0

嗯,這是我的例子。可以更簡單但有效。

#include <gtk/gtk.h> 
#include <stdio.h> 
#define TABLE 4 
#define C_RED "red" 
#define C_BLACK "black" 

typedef struct _Widgets Widgets; 
struct _Widgets 
{ 
    GtkWidget *checkbox; 
    GtkWidget *entry[TABLE-1]; 
}; 

static void change_color (GtkWidget *widget, gpointer data) 
{ 
    int i; 
    GdkColor color; 
    Widgets *_widget = (Widgets*) data; 
    gchar *cc = NULL; 

    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget))) 
     cc = C_RED; 
    else 
     cc = C_BLACK; 

    gdk_color_parse (cc, &color); 
    for (i = 0; i < TABLE; i++) 
     gtk_widget_modify_fg (_widget->entry[i], GTK_STATE_NORMAL, &color); 
} 

int main (int argc, char **argv) 
{ 
    int x,z; 
    int pos = 0; 
    GtkWidget *window = NULL; 
    GtkWidget *table = NULL; 
    Widgets widgets[TABLE]; 

    gtk_init (&argc, &argv); 
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL); 
    gtk_window_set_title (GTK_WINDOW(window), "Feel Gtk Table"); 
    g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK(gtk_main_quit), NULL); 
    table = gtk_table_new (TABLE, TABLE, FALSE); 
    gtk_container_add (GTK_CONTAINER (window), table); 


    for (x = 0; x < TABLE; x++) 
    { 
     widgets[x].checkbox = gtk_check_button_new(); 
     gtk_table_attach_defaults (GTK_TABLE(table), widgets[x].checkbox, 0, 1, x, x+1); 
     g_signal_connect (G_OBJECT (widgets[x].checkbox), "toggled", G_CALLBACK (change_color), &widgets[x]); 
     for (z = 0; z < TABLE-1; z++) 
     { 
      widgets[x].entry[z] = gtk_entry_new(); 
      gtk_table_attach_defaults (GTK_TABLE(table), widgets[x].entry[z], z+1, z+2, x, x+1); 
     } 
    } 
    gtk_widget_show_all (window); 
    gtk_main(); 

    return 0; 
} 
+0

我會盡力的。我走了一條不同的道路,遇到了困難。我的想法是將複選框命名爲帶有連接到最後的eth編號的checkbutton。一切都很順利,直到我碰到strncpy(getx,myx,i); 從那我得到瘋狂的字符,而不是我正在使用的字符串。整個代碼是 –

+0

如何在此處發佈代碼?它限制了我的字符。 –

+0

@SteveGe編輯器中有一個用於添加標記的代碼。 –

相關問題