Est-il possible de convertir automatiquement QVariant aux objets Python?
Question
PyQt 4.5.4, Python 2.6.2
Depuis la version 4.5.2 PyQt est en mesure d'accepter tous les objets Python où ont été autorisés auparavant que QVariants
. Cela conduit à des problèmes:
>>> itemModel.data(index, Qt.EditRole)
<Product object at 0xb7ce766c>
>>> index.data(Qt.EditRole)
<QVariant object at 0xb7ce768c>
Est-il possible de supprimer ce inconsistance?
La solution
PyQt 4.6, en utilisant l'API moderne:
La classe
QVariant
est mis en œuvre en tant que le type cartographié. Tout objet Python peut être passé lorsqu'une instance deQVariant
est attendu. Lorsque Qt retourne unQVariant
alors il sera automatiquement converti en Python d'origine objet ou un équivalent.None
est interprétée comme uneQVariant
invalide et vice-versa.
Autres conseils
Vous pouvez utiliser la méthode .toPyObject () sur un QVariant. Je doute que cela fonctionne pour les types personnalisés, cependant.
La seule solution que j'ai trouvé est la conversion de chaque valeur à un QVariant puis retour:
QVariant(possiblyAQVariant).toPyObject()
Cela fonctionne pour QVariant et types Python.