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

所有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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值