【发布时间】:2020-03-06 18:23:04
【问题描述】:
我很困惑如何使用QStandardItemModel的setData、setItemData和setItem方法,这些方法似乎有相同的效果,不知道我应该选择哪种方法最好?
class DemoD(QMainWindow):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
table = QTableView()
model = QStandardItemModel(4, 2)
table.setModel(model)
# delegate = SpinBoxDelegate()
# table.setItemDelegate(delegate)
for row in range(4):
for col in range(2):
item = QStandardItem('china')
model.setItem(row, col, item)
index = model.index(row, col)
value = QVariant((row + 1)*(col + 1))
model.setData(index, value)
model.setItemData(index, {1: 'a', 2: 'b'})
self.setCentralWidget(table)
self.resize(400, 300)
app = QApplication([])
demo = DemoD()
demo.show()
app.exec()
【问题讨论】:
-
model.setItemData(index, {1: 'a', 2: 'b'})语句似乎不起作用? -
很少看到
setData被这样使用,而setItemData几乎从未被使用过。更常见的是使用QStandardItem方法,如setText、setIcon、setForeground等。如果需要添加自定义数据,通常使用带有用户定义角色的item.setData()来完成。setItem方法最常用于填充表(对于其他视图,appendRow更常见),或替换现有项目时。它永远不会在setData通常出现的地方使用。 (PS:你也应该避免在 PyQt5 中使用QVariant,除非你知道你在做什么)。 -
@ekhumoro 感谢您的建议,我现在正在学习 pyqt 并不太清楚某些 API 之间的区别。
标签: pyqt pyqt5 qabstractitemmodel