qt qtableview 样式表设置单元格_Qt 自定义委托

本文介绍了Qt中自定义委托的概念,强调了在model/view架构中委托(delegate)的重要作用,用于处理用户输入和视图渲染。QStyledItemDelegate是常用的委托类,用于支持视图组件的绘制和编辑功能,与样式表结合使用。文中通过一个Track类和TrackDelegate类的示例,展示了如何创建自定义委托,覆盖QStyledItemDelegate的关键方法,实现对QTableWidget中歌曲名称和时长的自定义显示。
摘要由CSDN通过智能技术生成

自定义委托

好久没有来写文章了,由于家里面宽带断了,所以一直没能更新,今天现在写上一篇。

还是继续前面的内容。前面我们分三次把自定义 model 说完了,其实主要还是那三个实例。在 model/view 架构中,与 model 同等重要的就是 view。

我们知道,在经典的 MVC 模型中,view 用于向用户展示 model 的数据。但是,Qt 提供的不是 MVC 三层架构,而是一个 model/view 设计。这种设计并没有包含一个完整而独立的组件用于管理用户的交互。一般来说,view 仅仅是用作对 model 数据的展示和对用户输入的处理,而不应该去做其他的工作。

在这种结构中,为了获得对用户输入控制的灵活性,这种交互工作交给了 delegate,也就是“委托”,去完成。简单来说,就像它们的名字一样,view 将用户输入委托给 delegate 处理,而自己不去处理这种输入。这些组件提供一种输入能力,并且能够在某些 view 中提供这种交互情形下的渲染,比如在 table 中通过双击单元格即可编辑内容等。对这种控制委托的标准接口被定义在 QAbstractItemDelegate 类中。

delegate 可以用于渲染内容,这是通过 paint() 和 sizeHint() 函数来完成的。但是,对于一些简单的基于组件的 delegate,可以通过继承 QItemDelegate 或者 QStyledItemDelegate 来实现。这样就可以避免要完全重写 QAbstractItemDelegate 中所需要的所有函数。对于一些相对比较通用的函数,在这两个类中已经有了一个默认的实现。

Qt 提供的标准组件使用 QItemDelegate 提供编辑功能的支持。这种默认的实现被用在 QListView,QTableView 和 QTreeView 之中。view 实用的 delegate 可以通过 itemDelegate() 函数获得。setItemDelegate() 函数则可以为一个标准组件设置自定义的 delegate。

Qt 4.4版本之后提供了两个可以被继承的 delegate 类:QItemDelegate 和 QStyledItemDelegate。默认的 delegate 是 QStyledItemDelegate。这两个类可以被相互替代,用于给 view 组件提供绘制和编辑的功能。它们之间的主要区别在于,QStyledItemDelegate 使用当前的风格(style)去绘制组件。

所以,在自定义 delegate 或者需要使用 Qt style sheets 时,建议使用 QStyledItemDelegate 作为父类。使用这两个类的代码通常是一样的,除了需要使用 style进行绘制的部份。如果你希望为 view item 自定义绘制函数,最好实现一个自定义的 style。这个你可以通过 QStyle 类来实现。

如果 delegate 没有支持为你的数据类型进行绘制,或者你希望自己绘制 item,那么就可以继承 QStyledItemDelegate 类,并且重写 paint() 或者还需要重写 sizeHint() 函数。paint() 函数会被每一个 item 独立调用,而 sizeHint()函数则可以定义每一个 it

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值