列表视图 实现双击修改内容
可以给一个比较完整的代码示例吗?看了MSDN不是很明白。
#include <gtk/gtk.h> enum { LIST_ITEM = 0, N_COLUMNS }; void init_list(GtkWidget *list) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *store; renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("TreeView in ListView Mode",renderer, "text", LIST_ITEM, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(list),GTK_TREE_MODEL(store)); g_object_unref(store); } void add_to_list(GtkWidget *list, const gchar *str) { GtkListStore *store; GtkTreeIter iter; store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list))); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, LIST_ITEM, str, -1); } void selection_changed(GtkTreeSelection *selection, gpointer user_data) { GtkTreeIter iter; GtkTreeModel *model; char *value; if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(selection), &model, &iter)) { gtk_tree_model_get(model, &iter, LIST_ITEM, &value, -1); g_print("select item is: %s\n", value); g_free(value); } } int main(int argc,char *argv[ ]) { GtkWidget *window,*list; GtkTreeSelection *selection; gtk_init(&argc,&argv); window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window),"hello fishc - TreeView"); gtk_widget_set_size_request(GTK_WIDGET(window),300,200); list = gtk_tree_view_new(); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), TRUE); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); g_signal_connect(selection, "changed", G_CALLBACK(selection_changed), NULL); init_list(list); add_to_list(list, "first line"); add_to_list(list, "haha"); add_to_list(list, "g0398"); add_to_list(list, "fishc"); add_to_list(list, "last one"); gtk_container_add(GTK_CONTAINER(window), list); gtk_widget_show_all(window); gtk_main(); return 0; }