2009-09-03 83 views
2

PyQt的4.5.4,2.6.2的Python是否有可能将QVariants自动转换为Python对象?

自版本4.5.2 PyQt的是能够接受在那里以前只能QVariants允许任何Python对象。这导致一些问题:

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

是否有可能消除这种不一致?

回答

4

PyQt的4.6,使用现​​代API:

QVariant类被实现为 映射类型。当预期的QVariant实例为 时,任何Python对象都可以通过 。当Qt返回一个QVariant 时,它会自动将 转换为原始的Python 对象或等价物。 None是 解释为无效QVariant和 反之亦然。

1

您可以在QVariant上使用.toPyObject()方法。不过,我怀疑这是否适用于自定义类型。

+1

它的确如此。但事实上,一旦对象不是QVariant,麻烦就开始了。 – 2009-09-15 17:45:31

1

唯一的解决办法,我发现每值转换为的QVariant,然后回:

QVariant(possiblyAQVariant).toPyObject() 

这适用于QVariants和Python类型。

相关问题