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

C++ 在Qt中,如何从模型重置ListView中项目的背景颜色?,c++,qt,C++,Qt,在Qt中,我有一个QListView,它使用一个包含要显示的数据的自定义模型类。根据数据,我希望背景(以及最终的前景/文本)颜色设置与数据状态相匹配 到目前为止,我已经通过在QAbstractListModel::data()方法中为Qt::BackgroundRole返回一个QBrush,并在QVariant内选择QColor,如下所示: QVariant CustomListModel::data(const QModelIndex& index, int role) const {

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

到目前为止,我已经通过在
QAbstractListModel::data()
方法中为
Qt::BackgroundRole
返回一个
QBrush
,并在
QVariant
内选择
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()));
    }
    // ...
  }
}

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

在数据方法中尝试以下方法:

if (role == Qt::BackgroundRole)
{
    bool itemStateIsNeutral = ...

    if (itemStateIsNeutral) return QVariant();
    // else:

    return QVariant(QBrush(item.color()));
}

您可能必须执行return
QVariant(QBrush())
,但我对此不确定。

现在在添加我尝试过的东西时,我可能在其他地方错过了一个必需的连接,这使得东西无法按需工作。我明天会在工作中测试它,看看什么解决方案会起作用。好吧,我的错,这是我这边的一个问题,没有在其他地方正确地传播状态。我已经解决了这个问题,颜色设置和取消设置工作很容易。返回QVariant()是可以的,因为这意味着模型没有特定的值