如何在 pyqt 中使用 Qtableview /QAbstractTableModel 存储和检索自定义数据(使用 QtCore.Qt.UserRole?)?

how to store and retrieve custom data (using QtCore.Qt.UserRole?) with Qtableview /QAbstractTableModel in pyqt?

我是 model/view 框架的新手,遇到了一些麻烦, 我在小部件上使用 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]

但我无法让它工作: 我已经能够成功检索 name ,但不是 object 。 ..

经过一番折腾,包括打印数据方法的 "role" arg 以查看哪些角色传递给该方法(我得到 0,6,7,10 ...但不是 32 或其他角色) 并查看文档,在调用 "data" 方法期间似乎只有一些角色(不是 "QtCore.Qt.UserRole")可用?

是否有使用 "QtCore.Qt.UserRole" 实现此目的的方法?我读过这可以使用代表来实现吗?究竟如何?如果没有,我该怎么办?

非常感谢!, X

那么只有在用户传递 UserRole 时才会传递给函数:

myTableModelInstance.data(QtCore.Qt.UserRole)

如果我没有弄错的话,您正试图从行和列中获取元素,那么难道不应该有一种方法可以实现吗? (类似于

 myTableModelInstance.at(row, column)

您的 data 方法签名似乎不正确。应该是data(self, index, role = QtCore.Qt.DisplayRole)

根据提供的代码,您应该可以调用 myModel.data(index, QtCore.Qt.UserRole) 来获得您想要的。正如您所指出的,QtCore.Qt.UserRole 只是一个整数。如果您将整数传递给 data() 方法的 role 关键字参数,那么您的代码将 return self.elements[row][col]

UserRole 没有什么特别或神奇的地方。它只是一个被搁置以供通用使用的整数。有关角色列表,请参阅 documentation。请注意,Qt 不会自行访问此数据。 UserRole 用于 you,而不是 Qt。

如果您希望在视图中使用存储在 UserRole 中的数据(我想这就是您提到委托的原因?),那么您将需要提供此类数据的具体示例,视图、模型以及您希望如何使用数据。如果您正在寻找这个问题,我建议您发布一个新问题。