如何从PyQt4中的QVariant恢复我的python对象?

时间:2010-02-25 10:59:21

标签: python pyqt4 qvariant qabstractitemmodel

我正在创建QAbstractItemModel的子类,以便在QTreeView中显示。

我的index()parent()函数使用QModelIndex继承的函数QAbstractItemModel创建createIndex并为其提供row,{{1需要{}和column。这里,出于测试目的,数据是Python字符串。

data

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>" index()parent()函数中,我需要恢复数据。它来自data()。如何从QVariant恢复我的Python对象?

2 个答案:

答案 0 :(得分:12)

你试过这个吗?

my_python_object = my_qvariant.toPyObject()

http://pyqt.sourceforge.net/Docs/PyQt4/qvariant.html#toPyObject(只是为了完整性,但没有太多可以看到......)

答案 1 :(得分:4)

关键是直接在internalPointer()上使用QModelIndex,而不是完全处理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
相关问题