2

PyQt 4.5.4, Python 2.6.2

Since version 4.5.2 PyQt is able to accept any Python objects where formerly only QVariants were allowed. This leads to some problems:

>>> itemModel.data(index, Qt.EditRole)
<Product object at 0xb7ce766c>
>>> index.data(Qt.EditRole)
<QVariant object at 0xb7ce768c>

Is there a possibility to remove this inconsistence?

Georg Schölly
  • 124,188
  • 49
  • 220
  • 267

3 Answers3

4

PyQt 4.6, using the modern API:

The QVariant class is implemented as a mapped type. Any Python object can be passed when a QVariant instance is expected. When Qt returns a QVariant then it will automatically be converted to the original Python object or an equivalent. None is interpreted as an invalid QVariant and vice versa.

Georg Schölly
  • 124,188
  • 49
  • 220
  • 267
1

You could use the .toPyObject() method on a QVariant. I doubt that this works for custom types, though.

Wim Verhavert
  • 979
  • 8
  • 16
1

The only solution I have found is converting every value to a QVariant and then back:

QVariant(possiblyAQVariant).toPyObject()

This works for QVariants and Python types.

Georg Schölly
  • 124,188
  • 49
  • 220
  • 267