Comment puis-je obtenir mon objet python retour d'un QVariant dans PyQt4?
-
22-09-2019 - |
Question
Je suis en train de créer une sous-classe de QAbstractItemModel
à afficher dans un QTreeView
.
Ma fonction index()
et parent()
crée le QModelIndex
en utilisant la fonction QAbstractItemModel
héritée createIndex
et fournissant le row
, column
et data
nécessaires. Ici, à des fins de test, les données sont une chaîne 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>"
Dans les index()
, parent()
, et les fonctions de data()
que je dois récupérer mes données. Il se présente comme un QVariant
. Comment puis-je obtenir mon objet Python de retour de la QVariant?
La solution 2
L'essentiel est d'utiliser internalPointer()
directement sur le QModelIndex
, ne pas traiter avec le QVariant
du tout.
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
Autres conseils
Avez-vous essayé?
my_python_object = my_qvariant.toPyObject()
http://pyqt.sourceforge.net/Docs/PyQt4/qvariant .html # toPyObject (juste pour être complet, mais il n'y a pas grand-chose à voir là-bas ...)