在Qt中,我如何从模型中重置ListView中项目的背景颜色

In Qt how do I reset the background colour of an item in a ListView from the Model?

本文关键字:ListView 项目 背景 颜色 Qt 模型      更新时间:2023-10-16

在Qt中,我有一个使用包含数据显示的自定义模型类的QListView。根据数据,我希望背景(以及最终的前景/文本)颜色被设置为与数据的状态相匹配。

到目前为止,我已经通过在QAbstractListModel::data()方法中为Qt::BackgroundRole返回QBrushQVariant中选择的QColor来完成此操作,如下所示:

QVariant CustomListModel::data(const QModelIndex& index, int role) const
{
  Item& item = findItem(index);
  if (item)
  {
    // ...
    if (role == Qt::BackgroundRole)
    {
      return QVariant(QBrush(item.color()));
    }
    // ...
  }
}

我遇到的问题是,当项目的状态变为"中性"时,我希望能够将颜色重置回小部件的默认背景颜色,但我一直无法找到正确的说明来做到这一点。实现这一点的规范方法是什么?

在你的data方法中试试这样做:

if (role == Qt::BackgroundRole)
{
    bool itemStateIsNeutral = ...
    if (itemStateIsNeutral) return QVariant();
    // else:
    return QVariant(QBrush(item.color()));
}

你可能不得不做返回QVariant(QBrush())代替,我不确定这个