我正在使用以下代码尝试更改给定QModelIndex
处单元格的背景颜色。
ui->TreeView->model()->setData(index, QVariant(QBrush (QColor(Qt::green))) , Qt::BackgroundRole);
其中
index
由dataChanged()
信号给出。这不起作用。有什么想法吗?
这是我重新实现的
setData
函数。bool TreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
TreeItem *item = getItem(index); //gets item a given index
bool result = item->setData(index.column(), value);
if (result)
emit dataChanged(index, index);
return result;
}
这是基础
setData
的item
方法:bool TreeItem::setData(int column, const QVariant &value)
{
if (column < 0 || column >= itemData.size())
return false;
itemData[column] = value;
return true;
}
最佳答案
对于这个模糊的问题表示歉意。我设法自己解决了这个问题,因此,如果有人遇到类似问题,我将在此处发布。
对我来说,问题是我没有重新实现QAbstractItemView的data()
方法来说明新角色。
QVariant TreeModel::data(const QModelIndex &index, int role) const
{
TreeItem *item = getItem(index);
if (role == Qt::BackgroundRole)
return item->data(index.column());
//and so on...
AFAIK
data()
方法为树视图提供了需要呈现的模型数据。在这种方法中,我没有考虑role == Qt::BackgroundRole
的情况,因此视图永远不会从模型中获得适当的信息。