免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4124 | 回复: 1
打印 上一主题 下一主题

为什么treeview不能修改? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-25 15:35 |只看该作者 |倒序浏览
我已设置第二列为可编辑,现在是可编辑但不保存,编辑回车后还是原来的内容

#include <gtk/gtk.h>

int
main (int argc, char *argv[])
{
GtkWidget *main_window;
GtkWidget *tree_view;
GtkListStore *list_store;
GtkTreeViewColumn *column;
GtkCellRenderer *cell_renderer;
GtkTreeIter tree_iter;


gtk_set_locale ();
gtk_init (&argc, &argv);

main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (main_window), 320, 240);
gtk_window_set_title (GTK_WINDOW (main_window), "Main Window");


list_store = gtk_list_store_new (5, G_TYPE_STRING, G_TYPE_UINT,
G_TYPE_UINT, G_TYPE_STRING,
G_TYPE_STRING);
tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
gtk_widget_show (tree_view);
gtk_container_add (GTK_CONTAINER (main_window), tree_view);


/* 第一列:每列多个 CelRenderer,每个 CellRenderer 多个属性 */
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (column, "0001");
gtk_tree_view_column_set_resizable (column, TRUE);
gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width (column, 100);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);

cell_renderer = gtk_cell_renderer_pixbuf_new ();
gtk_tree_view_column_pack_start (column, cell_renderer, TRUE);
gtk_tree_view_column_set_attributes (column, cell_renderer, "stock-id", 0,
NULL);

/* 一个 CellRenderer 的多个属性与 TreeModel 的多个数据项联系 */
cell_renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (column, cell_renderer, TRUE);
gtk_tree_view_column_set_attributes (column, cell_renderer, "text", 1,
"editable", 2, NULL);

/* 第二列 */
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (column, "0002");
gtk_tree_view_column_set_resizable (column, TRUE);
/* 下面注释的语句是为了试试 GtkTreeViewColumnSizing
* 大家不妨,把注释去掉,看看结果有何不同
*/
// gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
// gtk_tree_view_column_set_fixed_width (column, 100);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);

cell_renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (column, cell_renderer, TRUE);
gtk_tree_view_column_set_attributes (column, cell_renderer, "text", 3,
NULL);

/* 第三列 */
column = gtk_tree_view_column_new ();
gtk_tree_view_column_set_title (column, "0003");
gtk_tree_view_column_set_resizable (column, TRUE);
gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width (column, 100);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);

cell_renderer = gtk_cell_renderer_text_new ();
gtk_tree_view_column_pack_start (column, cell_renderer, TRUE);
gtk_tree_view_column_set_attributes (column, cell_renderer, "text", 4,
NULL);


gtk_list_store_append (list_store, &tree_iter);
gtk_list_store_set (list_store, &tree_iter, 0, "gtk-cdrom", 1, 1000,
2, TRUE, 3, "string01..............", 4, "string02",
-1);
gtk_list_store_append (list_store, &tree_iter);
gtk_list_store_set (list_store, &tree_iter, 0, "gtk-help", 1, 2000,
2, TRUE, 3, "string11", 4, "string12", -1);

g_signal_connect (G_OBJECT (main_window), "destroy",
G_CALLBACK (gtk_main_quit), NULL);

gtk_widget_show_all (main_window);

gtk_main ();

return 0;
}

论坛徽章:
0
2 [报告]
发表于 2007-04-25 22:14 |只看该作者
GtkTreeView 显示的是 model 中的数据。因此,你还需要将在 cell 中修改之后的结果写到 model 中,否则读出显示的仍然是 model 中原来的数据。

gtk-demo 程序的 Tree View => Editable Cells 是一个现成的例子,可参考它的实现来处理。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP