【问题标题】:How to change color of item in QListView如何更改 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()-&gt;setData(vIndex, QBrush(Qt::red), Qt::ForegroundRole);
  • @vahancho Ty.它工作正常。但我不明白为什么 setItemData() 不起作用。
  • setItemData() 函数返回什么?
  • 我不确定,但也许这会起作用:vMap.insert(Qt::ForegroundRole, QBrush(Qt::red)); model()-&gt;setItemData(vIndex, vMap);?
  • @vahancho 不。有点奇怪。没关系,你给了我正确的解决方案。再次感谢。

标签: qt qlistview


【解决方案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中的一些值可以忽略!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 2020-05-31
  • 2011-01-13
  • 1970-01-01
相关资源
最近更新 更多