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 混合选择?

QT4 qlistview保存图标位置手动移动下次

Qt入门系列开发教程高级控件篇QListview列表视图

为啥 QListView 中看不到文件图标?

在 Qt 中找不到 Qlistview Selectionchanged 事件?

QListView 仅在视图中显示单个项目