2011-02-05 4 views
1

안녕하세요 저는 작은 gtk 애플리케이션을 작성하기 위해 글 레이드를 사용합니다. 응용 프로그램에 목록 저장소가 포함되어 있습니다. 사용자가 행을 클릭 할 때마다이 행에 포함 된 정보를 가져올 수 있기를 원합니다. 내가 여기에서 계속 어떻게c : GtkListStore 행 변경 이벤트 - 선택한 행의 데이터를 가져올 수 있습니까?

void gtk_tree_view_row_activated_event_handler(GtkWidget *widget, gpointer data) { 

    GtkTreeSelection *selection; 
    GList *rows_list; 

    selection = gtk_tree_view_get_selection(widget); 
    rows_list = gtk_tree_selection_get_selected_rows (selection, widget);  
} 

:

은 행 변경 이벤트에서 잎이 난 다음 함수를 추가 사용하고 계십니까?

enum 
{ 
    LIST_ITEM = 0, 
    N_COLUMNS 
}; 

void view_selected_foreach_func(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer userdata) 
{ 
    char *value; 
    gtk_tree_model_get(model, iter, LIST_ITEM, &value, -1); 
    g_print("%s is selected\n", value); 
    g_free(value); 
} 

void gtk_tree_view_row_activated_event_handler(GtkWidget *widget, gpointer data) 
{ 
    GtkTreeSelection *selection; 
    selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(widget)); 
    gtk_tree_selection_selected_foreach(selection, view_selected_foreach_func, NULL); 
} 

난 당신이 GtkTreeSelection changed 신호 처리기를 정의하는 것 뭘 하려는지 달성하기 위해 다른 방법을 생각 : 아래의 코드는 당신을 위해 작동 할 경우

답변

2

PLS는 확인합니다.

는 트리보기를 설정 :

list = gtk_tree_view_new(); 
... 
selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); 
g_signal_connect(selection, "changed", G_CALLBACK(on_changed), label); 

변경된 신호 처리기 :

void on_changed(GtkWidget *widget, gpointer label) 
{ 
    GtkTreeIter iter; 
    GtkTreeModel *model; 
    char *value; 

    if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(widget), &model, &iter)) 
    { 
     gtk_tree_model_get(model, &iter, LIST_ITEM, &value, -1); 
     g_print("%s is selected\n", value); 
     g_free(value); 
    } 
} 

희망이 도움이 간주하는

+0

이 멋지다 아래 작은 예입니다! 나는 집에 도착하자 마자 시험해볼거야. 고마워요! – ufk

+1

당신은 멋진 사람입니다! 나는 두 번째 방법을 사용하는 것을 선호하는데, 문제없이 작동합니다. 모든 것에 대해 감사드립니다! – ufk