Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从PyQt4中的QVariant获取python对象?_Python_Pyqt4_Qvariant_Qabstractitemmodel - Fatal编程技术网

如何从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

My
index()
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

这个答案更符合最初的问题。它帮助了我,谢谢