我对模型/视图框架的使用还很陌生,并且遇到了一些麻烦,
我在小部件上使用 Qtableview 和 QAbstractTableModel
我试图使用 QAbstractTableModel 中的“data”方法在 QModelIndex 中存储一些自定义数据,如下所示:
class myTableModel(QtCore.QAbstractTableModel):
def __init__(self, parent = None):
QtCore.QAbstractTableModel.__init__(self, parent)
self.elements = [[this is supposed to be initialized at some point]]
def rowCount(self, parent = QtCore.QModelIndex()):
return len(self.elements)
def columnCount(self, parent = QtCore.QModelIndex()):
return len(self.elements[0])
def data(self, index, role = QtCore.Qt.DisplayRole):
row = index.row()
col = index.column()
if role == QtCore.Qt.DisplayRole:
return self.elements[row][col].getName()# an string gets stored and displayed on the widget
if role == QtCore.Qt.UserRole:
return self.elements[row][col]
但我无法让它工作:
我已经能够成功检索名称,但不能检索对象。 ..
经过一些混乱之后,包括打印数据方法的“角色”参数以查看哪些角色传递给该方法(我得到了 0,6,7,10 ...但不是 32 或其他角色)并查看了文档中,在调用“data”方法期间似乎只有某些角色(不是“QtCore.Qt.UserRole”)可用?
有没有办法使用“QtCore.Qt.UserRole”来实现这一点?我读过这可以使用代表来实现?究竟如何?如果没有,我该怎么办?
多谢!,
X
Your data
方法签名似乎不正确。它应该是data(self, index, role = QtCore.Qt.DisplayRole)
根据提供的代码,您应该能够调用myModel.data(index, QtCore.Qt.UserRole)
得到你想要的。正如你所指出的,QtCore.Qt.UserRole
只是一个整数。如果将整数传递给role
的关键字参数data()
方法,那么你的代码将返回self.elements[row][col]
.
没有什么特别或神奇的地方UserRole
。它只是一个被留作通用用途的整数。请参阅文档获取角色列表。请注意,Qt 本身不会访问此数据。这UserRole
在那里是为了you,不是 Qt。
如果你想将数据存储在UserRole
要在视图中使用(我想这就是您提到委托的原因?),那么您将需要提供此类数据、视图、模型以及您希望如何使用数据的具体示例。如果这就是您正在寻找的问题,我建议您发布一个新问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)