GTK treeview原理及使用方法解析_Linux

来源:脚本之家  责任编辑:小易  

GtkCList is deprecated and should not be used in newly-written code. GtkCombo has been deprecated since version 2.4 and should not be used in newly-written code. Use GtkComboBox instead. ================================================================= GtkClist可以2113用52614102GtkTreeView代替1653www.zgxue.com防采集请勿采集本网。

GtkTreeView 构件是一个高级的构件,利用他你就可以制作出漂亮的普通列表或者是树状的列表。这个构件里可以包含一或者多行。他的构架呢?正是采用了大名鼎鼎的MVC (Model View Controller) 设计框架。也就是说数据和显示方式是进行了一种分离的操作。

如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构、算法、网 络、操作系统等知识。因此本文不会讲解具体的技术,

于是在GtktreeView构件中确实还有着其他几个独立的对象结构(objects)。

1 第一部分:LINUX平台搭建与环境熟悉 了解Linux系统;区分各种版本的Linux系统,以便于拓展Linux视野。1、Linux 简介;2、Linux 系统的主要特点;3、Linux 的

其中 GtkCellRenderer 就决定了在GtkTreeViewColumn. 中的数据究竟是如何来进行显示呈现的。

心理分析 医疗卫生 精选 知道专栏 知道日报 ipmitool使用方法 linux 查看温度 ipmitool怎么安装linux ping命令 ipmitool原理 ./ipmitool raw

GtkListStore 和GtkTreeStore 的功能为体现模型(model)的作用。

处理GtkTreeView的"button_press_event"事件,在回调函数中event->button的值为3时表示是右键 。然后在回调函数中创建菜单再调用就可以了

也就是说他们是用来处理和分析将要在GtkTreeView显示的数据的。

GtkTreeIter 则是一个数据结构被用于在GtkTreeView构件中,对行中的数据进行操作。

GtkTreeSelection 则是用来处理选项的。

效果如下

代码如下

#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("List Items", 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 on_changed(GtkWidget *widget, gpointer label){ GtkTreeIter iter; GtkTreeModel *model; gchar *value; if (gtk_tree_selection_get_selected( GTK_TREE_SELECTION(widget), &model, &iter)) { gtk_tree_model_get(model, &iter, LIST_ITEM, &value, -1); gtk_label_set_text(GTK_LABEL(label), value); g_free(value); }}int main(int argc, char *argv[]){ GtkWidget *window; GtkWidget *list; GtkWidget *vbox; GtkWidget *label; GtkTreeSelection *selection; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); list = gtk_tree_view_new(); gtk_window_set_title(GTK_WINDOW(window), "List view"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);//设置为居中。 gtk_container_set_border_width(GTK_CONTAINER(window), 10); gtk_widget_set_size_request(window, 270, 250); gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE); vbox = gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), list, TRUE, TRUE, 5); label = gtk_label_new(""); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); gtk_container_add(GTK_CONTAINER(window), vbox); init_list(list); add_to_list(list, "Aliens"); add_to_list(list, "Leon"); add_to_list(list, "The Verdict"); add_to_list(list, "North Face"); add_to_list(list, "Der Untergang"); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); g_signal_connect(selection, "changed", G_CALLBACK(on_changed), label); g_signal_connect(G_OBJECT (window), "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0;}

在我们上面的这个示例代码中,我们将向大家展示的是5个条目并布置于GtkTreeView 构件中。我们首先在window中放置一个GtkVBox 构件。 在这个 GtkVBox 构件中含有两个构件:GtkTreeView和GtkLabel。

list = gtk_tree_view_new();

gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE);

调用list()函数,初始化构件list。

renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes("List Items", renderer, "text", LIST_ITEM, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(list), column);

在初始化函数中,我们生成了只有一栏的GtkTreeView。

store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(list), GTK_TREE_MODEL(store));

接下来我们又生成了一个GtkListStore 构件(a model) 然后把它与list 构件绑定。

g_object_unref(store);

这个 model 被自动的销毁,以释放内存空间。

add_to_list(list, "Aliens");

上面就是在调用add_to_list()函数,实现向list 中在增加一个选项的功能。

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);

在函数add_to_list() 中,我们利用系统函数gtk_tree_view_get_model()来获得model。我们生成新的一行并把行中的数据交给model处理,这里正是借助GtkTreeIter来完成这个功能。

selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));

GtkTreeSelection际上并不需要明确生成。在这里,我们是利用 GtkTreeView构件自动来生成。来帮助完成这项工作的正如你所见到的是系统函数gtk_tree_view_get_selection()。

好了再练习一下

增加一栏

代码如下

#include <gtk/gtk.h>enum{ LIST_ITEM = 0, LIST_AGE, N_COLUMNS};void init_list(GtkWidget *list){ //要想让视图显示出数据,必须建立GtkCellRenderer与GtkTreeViewColumn GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkListStore *store; //建立一个GtkCellRenderer renderer = gtk_cell_renderer_text_new (); //建立一个带标题的列 并且将renderer放入其中使其能显示内容 column = gtk_tree_view_column_new_with_attributes("List Items", renderer, "text", LIST_ITEM, NULL); //将列加入gtk_tree_view gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); //建立一个GtkCellRenderer renderer = gtk_cell_renderer_text_new (); //g_object_set (G_OBJECT (renderer), "xalign", 1.0, NULL);//居右 //建立一个带标题的列 并且将renderer放入其中使其能显示内容 column = gtk_tree_view_column_new_with_attributes("List age", renderer, "text", LIST_AGE, NULL); //将列加入gtk_tree_view gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING,G_TYPE_INT); //关联视图与模型 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 ,gint age){ 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,LIST_AGE,age, -1);}void on_changed(GtkWidget *widget, gpointer label){ GtkTreeIter iter; GtkTreeModel *model; gchar *value; //获得treeview中选中的一行的GtkTreeIter if (gtk_tree_selection_get_selected( GTK_TREE_SELECTION(widget), &model, &iter)) { gtk_tree_model_get(model, &iter, LIST_ITEM, &value, -1); gtk_label_set_text(GTK_LABEL(label), value); g_free(value); }}int main(int argc, char *argv[]){ GtkWidget *window; GtkWidget *list; GtkWidget *vbox; GtkWidget *label; GtkTreeSelection *selection; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); list = gtk_tree_view_new(); gtk_window_set_title(GTK_WINDOW(window), "List view"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_container_set_border_width(GTK_CONTAINER(window), 10); gtk_widget_set_size_request(window, 270, 250); //设置标题的可见性状态。 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), TRUE ); vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);//gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), list, TRUE, TRUE, 5); label = gtk_label_new(""); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 5); gtk_container_add(GTK_CONTAINER(window), vbox); init_list(list); add_to_list(list, "Aliens" ,10 ); add_to_list(list, "Leon" ,2 ); add_to_list(list, "The Verdict" ,30 ); add_to_list(list, "North Face" ,4 ); add_to_list(list, "Der Untergang",50 ); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); g_signal_connect(selection, "changed", G_CALLBACK(on_changed), label); g_signal_connect(G_OBJECT (window), "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0;}

GtkTreeIter是迭代器,用来遍历访问树中的条目。GtkTreeModel是和树关联的数据存储。GtkListStore也是和树关联的数据存储,但是是单层列表的特例内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • linxu服务器上安装jdk 详细步骤
  • ubuntu删除多余内核的方法
  • linux 下读xml 的类详解及实现代码
  • linux环境下安装 openoffice 并启动服务 的方法
  • linux下kafka分布式集群安装教程
  • linux 远程控制windows系统下的程序(三种方法)
  • linux(ubuntu)下实现增加/删除文件权限
  • linux环境下apache服务器配置二级域名的方法详解
  • 虚拟机安装linux系统无法上网的解决方法
  • 解决yum安装报错protected multilib versions的问题
  • GTK TREEVIEW 中的 GtkTreeIter Iter; GtkTreeMode...
  • GTK 编程
  • Linux系统最基础的介绍和使用方法
  • gtk treeview 删除节点
  • Java高级软件工程师会面试哪些问题
  • 成为linux程序员需要学习什么
  • linux下如何安装ipmitool
  • gtk如何批量载入文本
  • 求kali linux安装minidwep-gtk的详细方法及步骤!
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器android treeview实现带复选框树形组织结构对python 窗体(tkinter)树状数据(treeview)详解bootstrap treeview 树形菜单带复选框及级联选择功能wpf自定义treeview控件样式实现qq联系人列表效果bootstrap treeview实现动态加载数据并添加快捷搜索功能android ui 之实现多级树形列表treeview示例js树形菜单组件bootstrap treeview使用方法详解bootstrap树形菜单插件treeview.js使用方法详解浅析bootstrap treeview的简单使用linxu服务器上安装jdk 详细步骤ubuntu删除多余内核的方法linux 下读xml 的类详解及实现代码linux环境下安装 openoffice 并启动服务 的方法linux下kafka分布式集群安装教程linux 远程控制windows系统下的程序(三种方法)linux(ubuntu)下实现增加/删除文件权限linux环境下apache服务器配置二级域名的方法详解虚拟机安装linux系统无法上网的解决方法解决yum安装报错protected multilib versions的问题apache开启.htaccess及.htaccessservice temporarily unavailabllinux下实现免密码登录(超详细)apache rewrite url重定向功能的linux下用cron定时执行任务的方法apache性能测试工具ab使用详解centos 6.4安装配置lamp服务器(a阿里云服务器ping不通解决办法(centos+nginx+php+mysql详细配置apache you don""t have permiss在linux上如何检查用户所属组详解怎么禁用 ubuntu 服务器中终端欢迎消息中linux无损扩容的方法centos6.7系统中配置lnmp环境阿里云centos 7系统挂载ssd云盘的教程ubuntu环境下安装memcache及启动的方法linux 判断文件修改时间和系统时间差linux 创建修改删除用户和组的方法linux服务器搭建nvidia-docker环境过程详比较详细的基于centos的www服务器架设指南
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved