どのように私はPyQt4でQVariantからの私のpythonオブジェクトのバックを得るのですか?
-
22-09-2019 - |
質問
私はQAbstractItemModel
に表示するQTreeView
のサブクラスを作成しています。
私index()
とparent()
機能がQModelIndex
QAbstractItemModel
継承された関数createIndex
を使用し、それに必要なrow
、column
、および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する(ちょうど完全性のために、しかし...そこに見ることがあまりありません)。
所属していません StackOverflow