Gibt es eine Möglichkeit, automatisch QVariants zu konvertieren Python-Objekte?
Frage
PyQt 4.5.4, Python 2.6.2
Seit Version 4.5.2 PyQt der Lage ist, jeden Python-Objekte zu übernehmen, wo früher nur QVariants
durften. Dies führt zu einigen Problemen:
>>> itemModel.data(index, Qt.EditRole)
<Product object at 0xb7ce766c>
>>> index.data(Qt.EditRole)
<QVariant object at 0xb7ce768c>
Gibt es eine Möglichkeit, diese Inkonsistenz zu entfernen?
Lösung
PyQt 4.6, mit der modernen API:
Die
QVariant
Klasse wird als ein implementiert kartiert Typ. Alle Python-Objekt kann sein übergeben, wenn eineQVariant
Instanz erwartet. Wenn kehrt Qt eineQVariant
dann wird es automatisch sein auf den ursprünglichen Python umgewandelt Objekt oder ein Äquivalent.None
ist interpretiert als eine ungültigeQVariant
und vice versa.
Andere Tipps
Sie könnten die .toPyObject () -Methode auf einem QVariant verwenden. Ich bezweifle, dass dies funktioniert für benutzerdefinierte Typen, though.
Die einzige Lösung, die ich gefunden habe, ist jeder Wert auf einen QVariant Umwandlung und dann zurück:
QVariant(possiblyAQVariant).toPyObject()
Dies funktioniert für QVariants und Python-Typen.