どのように私はPyQt4でQVariantからの私のpythonオブジェクトのバックを得るのですか?

StackOverflow https://stackoverflow.com/questions/2333420

質問

私はQAbstractItemModelに表示するQTreeViewのサブクラスを作成しています。

index()parent()機能がQModelIndex QAbstractItemModel継承された関数createIndexを使用し、それに必要なrowcolumn、およびdataを提供を作成します。ここでは、テスト目的のために、データは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>"

index()parent()、およびdata()機能の中で、私は私のデータの背中を取得する必要があります。それはQVariantとして提供されます。私はQVariantから私のPythonオブジェクトを取り戻す方法を教えてください。

役に立ちましたか?

解決 2

重要なのは、すべての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

他のヒント

あなたはこれを試したことがありますか?

my_python_object = my_qvariant.toPyObject()

http://pyqt.sourceforge.net/Docs/PyQt4/qvariant .htmlを#toPyObjectする(ちょうど完全性のために、しかし...そこに見ることがあまりありません)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top