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
- Qt中如何自定义ListView/TreeView单个item的显示和响应
- ListView GridView 自定义ViewGroup的单个item 刷新 和 单个item中的局部元素刷新
- listview和recycleview的刷新单个item
- Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏
- Delphi中使用ListView和TreeView的Item中的Data可能被忽略的内存泄漏
- android自定义ListView的Item无法响应OnItemClick的解决办法
- Android自定义ListView的Item无法响应OnItemClick的解决办法
- Android 自定义ListView + Gallery 组合,在ListView的一个item中显示多张图片
- 如何响应ListView里不同的Item的双击事件
- ListView中显示不同的item
- ListView中单个item的跑马灯效果;及所有item实现跑马灯
- WPF中确保显示TreeView选中的Item
- ListView中Item中组件事件的响应
- 删除listview列表里面的单个item
- ListView刷新单个item
- 修改ListView单个Item
- listview单个刷新item
- listView刷新单个Item
- js日历
- 消息中间件原理及JMS简介(1)
- Oracle之白皮书(1)ERP
- 软件人生经验
- 值类型,引用类型的初始化,等值判断,传递和转换
- Qt中如何自定义ListView/TreeView单个item的显示和响应
- 如果没有电脑?
- Octeon 的图片
- 事件模型探究
- exec与sp_executesql
- sqlite点滴
- 消息中间件原理及JMS简介(2)
- SIPPhone toolkit 增加 iLBC codec 支持
- 程序思想