如何从PyQt4中的QVariant获取python对象?
我正在创建如何从PyQt4中的QVariant获取python对象?,python,pyqt4,qvariant,qabstractitemmodel,Python,Pyqt4,Qvariant,Qabstractitemmodel,我正在创建qabstractemmodel的子类,以显示在QTreeView中 Myindex()和parent()函数使用继承函数QAbstractItemModel创建QModelIndex,并为其提供所需的行、列和数据。这里,出于测试目的,数据是一个Python字符串 class TestModel(QAbstractItemModel): def __init__(self): QAbstractItemModel.__init__(self) def
qabstractemmodel
的子类,以显示在QTreeView
中
Myindex()
和parent()
函数使用继承函数QAbstractItemModel
创建QModelIndex
,并为其提供所需的行
、列
和数据。这里,出于测试目的,数据是一个Python字符串
class TestModel(QAbstractItemModel):
def __init__(self):
QAbstractItemModel.__init__(self)
def index(self, row, column, parent):
if parent.isValid():
return self.createIndex(row, column, "bar")
return self.createIndex(row, column, "foo")
def parent(self, index):
if index.isValid():
if index.data().data() == "bar": <--- NEVER TRUE
return self.createIndex(0, 0, "foo")
return QModelIndex()
def rowCount(self, index):
if index.isValid():
if index.data().data() == "bar": <--- NEVER TRUE
return 0
return 1
def columnCount(self, index):
return 1
def data(self, index, role):
if index.isValid():
return index.data().data() <--- CANNOT DO ANYTHING WITH IT
return "<None>"
类测试模型(QAbstracteModel):
定义初始化(自):
QabstracteModel.\uuuuu init\uuuuu(自)
def索引(自身、行、列、父项):
如果parent.isValid():
返回self.createIndex(行、列、“条”)
返回self.createIndex(行、列,“foo”)
def父级(自我,索引):
如果index.isValid():
如果index.data().data()=“bar”:您尝试过这个吗
my_python_object = my_qvariant.toPyObject()
(只是为了完整性,但没有太多内容可看…关键是直接在QModelIndex
上使用internalPointer()
,而根本不处理QVariant
class TestModel(QAbstractItemModel):
def __init__(self, plan):
QAbstractItemModel.__init__(self)
def index(self, row, column, parent):
if not parent.isValid():
return self.createIndex(row, column, "foo")
return self.createIndex(row, column, "bar")
def parent(self, index):
if index.internalPointer() == "bar":
return self.createIndex(0, 0, "foo")
return QModelIndex()
def rowCount(self, index):
if index.internalPointer() == "bar":
return 0
return 1
def columnCount(self, index):
return 1
def data(self, index, role):
if role == 0: # Qt.DisplayRole
return index.internalPointer()
else:
return None
这个答案更符合最初的问题。它帮助了我,谢谢