更改QTableModel

时间:2017-12-22 10:22:58

标签: python c++ qt qabstractitemmodel qvariant

我想为QTableView中的单元格着色。

所以我正在尝试更改相关itemData中相应项的QTableModel

为此,我使用setItemData类的QAbstractTableModel方法。

在文档中:

QAbstractItemModel::setItemData(const QModelIndex & index, const QMap < int, QVariant > & roles)

这是我的代码:

color = QtGui.QColor(Qt.red)
self.model.setItemData(self.model.index(3,3),color,Qt.BackgroundRole)

我认为这会使模型的第三个单元格(水平和垂直)变成红色。

但申请回答:

TypeError: QAbstractItemModel.setItemData(QModelIndex, dict-of-int-QVariant): argument 2 has unexpected type 'QColor'

如果我尝试转换Qcolor中的Qvariant类型:

color = Qt.QVariant(QtGui.QColor(Qt.red))
self.model.setItemData(self.model.index(3,3),color,Qt.BackgroundRole)

答案:

TypeError: PyQt4.QtCore.QVariant represents a mapped type and cannot be instantiated

我真的无法理解。

所以我的问题是:我必须在setItemData方法的第二个参数中放入哪种类型的数据?

感谢您提前

1 个答案:

答案 0 :(得分:1)

您应该使用QAbstractItemModel::setDataitemData地图中设置单个值。

self.model.setData(self.model.index(3,3),color,Qt.BackgroundRole)

如果您想一次设置多个值,则可以使用QAbstractItemModel::setItemData,但必须构建一个QMap,其中每对由一个角色及其对应的值组成:

 QMap<int, QVariant> map;
 map.insert(Qt::BackgroundRole, color);
 self.model.setItemData(self.model.index(3,3), map);