更改 QTableModel 中单元格的背景颜色
Change background color for a cell in a QTableModel
我想给 QTableView
中的单元格着色。
所以我正在尝试更改关联 QTableModel
中相应项目的 itemData
。
为此,我使用 QAbstractTableModel
class 的 setItemData
方法。
在文档中:
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
方法的第二个参数中放入哪种类型的数据?
感谢提前
您应该使用 QAbstractItemModel::setData
在 itemData 映射中设置单个值。
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);
我想给 QTableView
中的单元格着色。
所以我正在尝试更改关联 QTableModel
中相应项目的 itemData
。
为此,我使用 QAbstractTableModel
class 的 setItemData
方法。
在文档中:
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
方法的第二个参数中放入哪种类型的数据?
感谢提前
您应该使用 QAbstractItemModel::setData
在 itemData 映射中设置单个值。
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);