如何更改 QListView 中项目的颜色
Posted
技术标签:
【中文标题】如何更改 QListView 中项目的颜色【英文标题】:How to change color of item in QListView 【发布时间】:2014-07-29 11:20:41 【问题描述】:我有自己的 QListView 子类,我想更改索引为 mLastIndex 的项目的颜色。我试过了
QModelIndex vIndex = model()->index(mLastIndex,0) ;
QMap<int,QVariant> vMap;
vMap.insert(Qt::ForegroundRole, QVariant(QBrush(Qt::red))) ;
model()->setItemData(vIndex, vMap) ;
但它并没有改变颜色,而是不再显示该项目。知道出了什么问题吗?
【问题讨论】:
我会打电话给model()->setData(vIndex, QBrush(Qt::red), Qt::ForegroundRole);
。
@vahancho Ty.它工作正常。但我不明白为什么 setItemData() 不起作用。
setItemData()
函数返回什么?
我不确定,但也许这会起作用:vMap.insert(Qt::ForegroundRole, QBrush(Qt::red)); model()->setItemData(vIndex, vMap);
?
@vahancho 不。有点奇怪。没关系,你给了我正确的解决方案。再次感谢。
【参考方案1】:
您的代码只是清除了模型中的所有数据,只留下了 Qt::ForegroundRole
的值,因为您的地图只包含新值。
这样做(它适用于大多数数据模型,而不仅仅是标准模型):
QModelIndex vIndex = model()->index(mLastIndex,0);
model->setData(vIndex, QBrush(Qt::red), Qt::ForegroundRole);
或者通过修改你的代码:
QModelIndex vIndex = model()->index(mLastIndex,0) ;
QMap<int,QVariant> vMap = model()->itemData(vIndex);
vMap.insert(Qt::ForegroundRole, QVariant(QBrush(Qt::red))) ;
model()->setItemData(vIndex, vMap) ;
【讨论】:
为您解答。有用。但我在文档中读到:不在角色中的角色将不会被修改。好吧,事实并非如此。 这是文档中的蹩脚句子。可能这意味着模型必须支持给定的角色(QStandardItemModel 支持所有可能的角色)。请注意,您可以提供自己的数据模型,该模型仅支持 DisplayRole 和 EditRole 等基本角色。 它应该支持所有包含 Qt::ForegroundRole 的 Qt::ItemDataRole。有什么奇怪的。也许是一个错误。 你不明白这并不意味着map和旧值合并,而是新map中的一些值可以忽略!以上是关于如何更改 QListView 中项目的颜色的主要内容,如果未能解决你的问题,请参考以下文章
Qt入门系列开发教程高级控件篇QListWidget列表小部件
Qt - 如何将 QListView 项目转移到另一个 QListView?