¿Existe la posibilidad de convertir automáticamente QVariants a objetos Python?
Pregunta
PyQt 4.5.4, Python 2.6.2
Desde la versión 4.5.2 PyQt es capaz de aceptar cualquier objeto Python donde antes sólo se permitía QVariants
. Esto lleva a algunos problemas:
>>> itemModel.data(index, Qt.EditRole)
<Product object at 0xb7ce766c>
>>> index.data(Qt.EditRole)
<QVariant object at 0xb7ce768c>
¿Existe la posibilidad de eliminar esta inconsistencia?
Solución
PyQt 4.6, utilizando la API moderna:
La clase
QVariant
se implementa como una tipo asignada. Cualquier objeto Python puede ser pasado cuando una instanciaQVariant
es esperado. Cuando Qt devuelve unQVariant
entonces será automáticamente convertido a la Python originales objeto o un equivalente.None
es interpretado como unQVariant
no válido y viceversa.
Otros consejos
Se puede usar el método .toPyObject () en un QVariant. Dudo que esto funciona para tipos personalizados, sin embargo.
La única solución que he encontrado es la conversión de cada valor a una QVariant y luego de vuelta:
QVariant(possiblyAQVariant).toPyObject()
Esto funciona para QVariants y tipos de Python.