В Qt как мне сбросить цвет фона элемента в ListView из модели? - PullRequest
2 голосов
/ 06 октября 2011

В Qt у меня есть QListView, использующий пользовательский класс Model, который содержит данные для отображения. Основываясь на данных, я хочу, чтобы цвет фона (и в конечном итоге цвет переднего плана / текста) был установлен в соответствии с состоянием данных.

До сих пор я достиг этого, возвращая QBrush с выбранным QColor внутри QVariant для Qt::BackgroundRole в методе QAbstractListModel::data(), вот так:

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

Проблема, с которой я сталкиваюсь, заключается в том, что я хочу иметь возможность вернуть цвет обратно к цвету фона виджета по умолчанию, когда состояние элемента становится «нейтральным», но я не смог найти правильные инструкции для этого. Каков канонический способ сделать это?

1 Ответ

2 голосов
/ 06 октября 2011

Попробуйте что-то вроде этого в вашем методе данных:

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

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

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

Возможно, вам придется вместо этого вернуть QVariant(QBrush()), я не уверен в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...