| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
Reworld,下班在家制作游戏,1500万奖金等你拿以码会友 以友辅仁
共有 187 人关注过本帖
标题:列表视图 实现双击修改内容
只看楼主 加入收藏
Iml梁
Rank: 2
等 级:论坛游民
帖 子:18
专家分:19
注 册:2019-8-13
结帖率:100%
  已结贴   问题点数:20  回复次数:2   
列表视图 实现双击修改内容
可以给一个比较完整的代码示例吗?看了MSDN不是很明白。
搜索更多相关主题的帖子: 内容 列表 视图 双击 修改 
2019-09-04 21:41
自学的数学
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:25
帖 子:681
专家分:2783
注 册:2017-11-15
  得分:20 
GTK中的列表视图显示,使用的是GtkTreeView部件,GtkTreeView部件可以以列表方式呈现也可以以树状视图方式呈现。

我们先来看看怎么以列表视图呈现。

GtkTreeView部件用MVC模式设计,不懂MVC的可以先看下百科:http://zh.

MVC模式将软件分为模型(Model)、视图(View)和控制器(Controller),主要是为了提高各模块的复用性,各模块各司其职自己干自己的事,方便维护。在web开发中经常会看到它的身影。

GtkTreeView可以显示任何“实现”GtkTreeModel接口的对象。这里实现GtkTreeModel接口的对象作为Model的身份出现,为View提供数据。
经常用到的Model有GtkTreeStore和GtkListStore,前者是在树状视图里使用,后者是在列表视图里使用,本文重点讲解GtkListStore对象。


GtkListStore是MVC中的Model,作为数据提供器,我们把要显示的数据附加到GtkListStore对象,然后把GtkListStore对象与GtkTreeView视图进行关联即可。GtkTreeIter是模型中的数据迭代器,即模型中的数据。
程序代码:
#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;
}
2019-09-04 21:46
Iml梁
Rank: 2
等 级:论坛游民
帖 子:18
专家分:19
注 册:2019-8-13
  得分:0 
回复 2楼 自学的数学
可以用API的形式说明吗?
2019-09-04 22:30
快速回复:列表视图 实现双击修改内容
数据加载中...
 
   





关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028666 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved