MrX*_*MrX 3 qt pyqt custom-data-type model-view
我在使用模型/视图框架方面相当新,并且遇到了一些麻烦,我在小部件上使用 Qtableview 和 QAbstractTableModel,并且我尝试使用“data”在 QModelIndex 中存储一些自定义数据“ QAbstractTableModel 的方法,如下所示:
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]
Run Code Online (Sandbox Code Playgroud)
但我无法让它工作:我已经能够成功检索名称,但不能检索对象。..
经过一些混乱之后,包括打印数据方法的“角色”参数以查看哪些角色传递给该方法(我得到了 0,6,7,10 ...但不是 32 或其他角色)并查看了文档中,在调用“data”方法期间似乎只有某些角色(不是“QtCore.Qt.UserRole”)可用?
有没有办法使用“QtCore.Qt.UserRole”来实现这一点?我读过这可以使用代表来实现?究竟如何?如果没有,我该怎么办?
非常感谢!,X
您的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为您准备的,而不是 Qt。
如果您希望存储在视图中的数据UserRole在视图中使用(我想这就是您提到委托的原因?),那么您将需要提供此类数据、视图、模型以及您想要的数据的具体示例要使用的。如果这就是您正在寻找的问题,我建议您发布一个新问题。