C'è la possibilità di convertire automaticamente QVariants di oggetti Python?
Domanda
PyQt 4.5.4, Python 2.6.2
Dalla versione 4.5.2 PyQt è in grado di accettare eventuali oggetti Python dove in precedenza sono stati ammessi solo QVariants
. Questo porta ad alcuni problemi:
>>> itemModel.data(index, Qt.EditRole)
<Product object at 0xb7ce766c>
>>> index.data(Qt.EditRole)
<QVariant object at 0xb7ce768c>
C'è una possibilità per rimuovere questa inconsistenza?
Soluzione
PyQt 4.6, utilizzando l'API moderna:
La classe
QVariant
è implementato come un tipo mappato. Qualsiasi oggetto Python può essere superato quando un'istanzaQVariant
è previsto. Quando Qt restituisce unQVariant
allora sarà automaticamente convertito al Python originale oggetto o un equivalente.None
è interpretato comeQVariant
valido e viceversa.
Altri suggerimenti
È possibile utilizzare il metodo .toPyObject () su un QVariant. Dubito che questo funziona per i tipi personalizzati, però.
L'unica soluzione che ho trovato è la conversione di ogni valore a una QVariant e poi di nuovo:
QVariant(possiblyAQVariant).toPyObject()
Questo funziona per QVariants e tipi di Python.