Existe a possibilidade de converter automaticamente os qvariants em objetos Python?
Pergunta
PYQT 4.5.4, Python 2.6.2
Desde a versão 4.5.2 PYQT, é capaz de aceitar quaisquer objetos python onde anteriormente apenas QVariants
foram permitidos. Isso leva a alguns problemas:
>>> itemModel.data(index, Qt.EditRole)
<Product object at 0xb7ce766c>
>>> index.data(Qt.EditRole)
<QVariant object at 0xb7ce768c>
Existe a possibilidade de remover essa inconsistência?
Solução
PYQT 4.6, usando a API moderna:
o
QVariant
A classe é implementada como um tipo mapeado. Qualquer objeto python pode ser passado quando umQVariant
a instância é esperada. Quando o QT retorna umQVariant
Em seguida, ele será automaticamente convertido para o objeto Python original ou um equivalente.None
é interpretado como um inválidoQVariant
e vice versa.
Outras dicas
Você pode usar o método .topyObject () em um qvarariant. Duvido que isso funcione para tipos personalizados, no entanto.
A única solução que encontrei é converter todos os valores em um qVariant e depois de volta:
QVariant(possiblyAQVariant).toPyObject()
Isso funciona para os tipos de qvariants e python.