jie*_*jie 6 pyqt qabstractitemmodel pyqt5
我很困惑如何使用setData、setItemData和setItem方法QStandardItemModel,这些方法似乎具有相同的效果,我想知道我应该选择使用哪种方法最好?
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()
Run Code Online (Sandbox Code Playgroud)
如果您想了解 Qt 模型的概念,您应该阅读以下指南:
考虑到您已经仔细阅读了前面的链接,我们将尝试解释您指出的不同方法之间的区别:
setData():每个Qt模型都继承自QAbstractItemModel,因此该类定义了一般行为,在本例中定义了setData()模型负责修改与QModelIndex关联的角色的信息。换句话说,如果您想实现可编辑模型,则必须实现它的通用方法,例如 QStringListModel 不是可编辑模型,因此它不会实现它,但在 QStandardItemModel 的情况下,它是可编辑的,因此您可以修改通过该方法获得模型的信息。
setItem(): QStandardItem是QStandardItemModel的一个概念,在概念上与QModelIndex类似。该元素允许您轻松地与 QModelIndex 进行交互。如果 QStandardItem 未与模型关联,它将仅存储信息,在分配模型时,所有信息都会传递给模型,并且模型会通知您可以通过其他方法(例如 setData)进行的任何更改。与模型的 setData 等效的是 QStandardItem 的 setData 方法,但后者不需要提供 QModelIndex,因为该信息是内部可用的或者可以在建立模型时获得。
例如:
it.setText("foo")
it.setTextAlignment(QtCore.Qt.AlignCenter)
Run Code Online (Sandbox Code Playgroud)
相当于
it.model().setData(it.index(), "foo", QtCore.Qt.DisplayRole)
it.model().setData(it.index(), QtCore.Qt.AlignCenter, QtCore.Qt.TextAlignmentRole)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,QStandardItem允许您以简单的方式修改项目的信息,并且以简单的方式您可以说它是模型的项目。
对于 QStandardItemModel,以下代码是等效的:
it.setText("foo")
it.setTextAlignment(QtCore.Qt.AlignCenter)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8216 次 |
| 最近记录: |