Qt:更改 QListView 中的图标
Posted
技术标签:
【中文标题】Qt:更改 QListView 中的图标【英文标题】:Qt: Change the icon in a QListView 【发布时间】:2015-08-03 20:08:59 【问题描述】:有没有办法在 QListView
显示后更改元素的图标?
我找不到使用DecorationRole
(用于图标的角色)的方法来创建setData
。
使用的模型是自定义的QFileSystemModel
,但默认实现只对EditRole
有好处,所以要更改项目的名称。
我不知道如何覆盖 setData
。
目标是在鼠标悬停在项目上时更改图标(通过mouseMoveEvent
)
【问题讨论】:
子类QFileSystemModel
并将 DecorationRole
填充到 setData
?但是你需要知道在哪里设置图标,以便视图可以通过模型的data()
访问它。
【参考方案1】:
您需要继承 QListView
并实现当鼠标悬停在项目上时更改显示图标角色的行为。
这样的子类可以使用内部代理模型,这样它就不需要弄乱基础视图的绘制。只需通知代理给定项目的装饰角色数据已更改,基本视图就会知道该做什么。
【讨论】:
我不明白“改变显示图标的角色”是什么意思。 @user3842408 源模型提供了两个图标,默认在装饰角色下,一个悬停在自定义角色下。代理将针对装饰角色数据的请求重定向到同一角色或自定义悬停角色,具体取决于来自子类视图的方向。以上是关于Qt:更改 QListView 中的图标的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 Qt 对 QListView 中的图标进行 alpha 混合选择?