PyQt 4.5.4,Python 2.6.2
由于版本 4.5.2 PyQt 能够接受以前只QVariants
允许的任何 Python 对象。这会导致一些问题:
>>> itemModel.data(index, Qt.EditRole)
<Product object at 0xb7ce766c>
>>> index.data(Qt.EditRole)
<QVariant object at 0xb7ce768c>
有没有可能消除这种不一致?
PyQt 4.6,使用现代 API:
该类
QVariant
被实现为映射类型。QVariant
当需要实例时,可以传递任何 Python 对象。当 Qt 返回 aQVariant
then 时,它将自动转换为原始 Python 对象或等效对象。None
被解释为无效QVariant
,反之亦然。
您可以在 QVariant 上使用 .toPyObject() 方法。不过,我怀疑这是否适用于自定义类型。
我发现的唯一解决方案是将每个值转换为 QVariant 然后返回:
QVariant(possiblyAQVariant).toPyObject()
这适用于 QVariants 和 Python 类型。