Wie kann ich ein Python-Objekt zurück von einem QVariant in PyQt4 bekommen?
-
22-09-2019 - |
Frage
Ich bin eine Unterklasse von QAbstractItemModel
Erstellung in einem QTreeView
angezeigt werden.
Meine index()
und parent()
Funktion erstellt die QModelIndex
die QAbstractItemModel
geerbt Funktion createIndex
verwenden und die row
, column
Bereitstellung und data
benötigt. Hier für Testzwecke, Daten ist ein Python-String.
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>"
Innerhalb der index()
, parent()
und data()
Funktionen, die ich brauche, um meine Daten wieder zu bekommen. Es kommt als QVariant
. Wie erhalte ich mein Python-Objekt zurück vom QVariant?
Lösung 2
Das Wichtigste ist internalPointer()
direkt am QModelIndex
zu verwenden, nicht mit den QVariant
überhaupt zu tun.
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
Andere Tipps
Haben Sie versucht das?
my_python_object = my_qvariant.toPyObject()
http://pyqt.sourceforge.net/Docs/PyQt4/qvariant .html # toPyObject (nur der Vollständigkeit halber, aber es gibt es nicht viel zu sehen ...)