Есть ли возможность автоматически конвертировать QVariants в объекты Python?
Вопрос
PyQt 4.5.4, Python 2.6.2
Начиная с версии 4.5.2 PyQt способен принимать любые объекты Python, где ранее только QVariants
были разрешены.Это приводит к некоторым проблемам:
>>> itemModel.data(index, Qt.EditRole)
<Product object at 0xb7ce766c>
>>> index.data(Qt.EditRole)
<QVariant object at 0xb7ce768c>
Есть ли возможность устранить это несоответствие?
Решение
PyQt 4.6, использующий современный API:
В
QVariant
класс реализован как сопоставленный тип.Любой объект Python может быть передан, когдаQVariant
экземпляр является ожидаемым.Когда Qt возвращаетQVariant
затем он будет автоматически преобразован в исходный Python object или эквивалент.None
является интерпретируется как недопустимыйQVariant
и наоборот.
Другие советы
Вы могли бы использовать .Метод toPyObject() для QVariant .Однако я сомневаюсь, что это работает для пользовательских типов.
Единственное решение, которое я нашел, - это преобразование каждого значения в QVariant, а затем обратно:
QVariant(possiblyAQVariant).toPyObject()
Это работает для типов QVariants и Python.