Qt中如何自定义ListView/TreeView单个item的显示和响应

来源:互联网 发布:淘宝小号管理软件 编辑:程序博客网 时间:2024/06/05 10:51

所有GUI的应用程序中Model/View都是一种非常常见的模式,Qt当然也不例外,不过跟MFC/WTL之类又有不同。本文简要说明了如何在Qt Model/View框架下实现自定义ListView的显示和响应。

 

假设我们有这样的情形:在Widows Explorer中,当我们用“Details”模式来显示文件夹信息时,可以看到诸如文件名、大小、创建日期、类型等信息。现在我们要修改的一栏是Tag(在Vista可以看到)。

假设我们有这样的需求:用户可以单击Tag这一栏,从右键菜单中选择“编辑Tag”,然后View给出一个ComboBox控件,可以自己输入或者从已有的tag中选择。

 

在继续往下看之前,想想如果是你如何实现(C++)?

 

我相信有人会想到重新派生一个View对象,响应用户操作,并完成对model的修改。这样当然可以实现目标,但是考虑到如果有其他的column也有类似的需求,那View的代码可能会比较复杂。

 

我们再看看用Qt如何实现:

概述:创建Delegate对象,为ListView的某一栏指定Delegate,Deletage对象负责显示以及响应操作。

具体步骤:

1. 从QItemDelegate或者QStyledItemDelegate派生一个对象,并实现几个简单的接口:

createEditor:创建用于编辑对象的控件,比如这里是ComboBox。

setEditorData:初始化编辑控件的数据,比如这里需要populate ComboBox的内容,把当前Tag设置为ComboBox的值。

setModelData:响应ComboBox完成编辑的消息,用新的数据更新Model中的信息。

2. 获取ListView的指针,通过函数setItemDelegateForColumn将新的Deletage设置到View中。

3. 设置trigger或者响应右键菜单启动ListView的Edit模式。

 

如果要自定义显示,则在Delegate中实现paint函数即可。怎么样,简单吧。

 

Qt自带的例子有更详细的说明:http://doc.trolltech.com/4.5/model-view-delegate.html

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小班走丢了怎么办教案 小班走丢了怎么办反思 房屋外墙漏水物业不管怎么办 厨房墙砖用色花怎么办 小孩子做错事很偏激怎么办 孩子在学校偷钱怎么办 房间墙壁上到处有湿虫怎么办 买了西晒的房子怎么办 墙面瓷砖下水管漏水怎么办 西晒房间开空调没效果怎么办 墙纸被小孩画了怎么办 集成墙板缝隙大怎么办 高血压变低血压怎么办会恢复吗 总是感觉睡不够好困怎么办 两岁宝宝说有鬼怎么办 阳台改成了卧室晒衣服怎么办 室外墙角边墙泥受潮脱落怎么办 新房装修墙体发霉了怎么办 宝宝吃多了发烧怎么办 宝宝睡觉不爱盖被子怎么办 1岁宝宝不盖被子怎么办 2岁宝宝不盖被子怎么办 买的芬琳漆不够刷的怎么办 1.3米宽厨房门怎么办 墙面漆颜色刷深了怎么办 地板上沾了墙漆怎么办 孩子连发高烧8天了怎么办 孩子对数字不敏感怎么办 三岁宝宝不爱学习怎么办 5岁还不认识数字怎么办 小孩上中班还不认识数字怎么办 中班小孩数字都不认识怎么办 中班小孩记不住数字怎么办 中班小孩不肯练数字描红怎么办 2个月吃母乳婴儿缺钙怎么办 月经期接吻水多怎么办 4岁宝宝晚上尿多怎么办 2岁宝宝晚上尿多怎么办 3岁宝宝晚上尿多怎么办 宝宝拉肚子拉绿色的屎怎么办 婴儿吃奶粉大便干燥怎么办