为什么QVariant.toFoo()和QVariant.convert(Foo)不相同?

时间:2012-09-07 22:16:23

标签: python qt pyqt

我正在尝试将QVariant转换为QSize。

from PyQt4.QtCore import (                                                     
    QVariant,                                                                  
    QSize,                                                                      
    )                                                                          

s = QSize(4,3)                                                                 
x = QVariant(s)                                                                

#Check, and hopefully do conversion                                            
print x.canConvert(QVariant.Size) #True                                           
print x.convert(QVariant.Size)    #True                                           
print type(x)                     #<class 'PyQt4.QtCore.QVariant'>...why??                
print type(x.toSize())            #<class 'PyQt4.QtCore.QSize'>

为什么我必须为x的类型做x.toSize才能成为QSize?我期望x.convert()会使x成为QSize的一个实例。

这对我没什么帮助...... http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qvariant.html#convert ...因为它说convert()“将变体强制转换为所请求的类型......”

感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

你误解了QVariant.convert的目的。

它会转换变体值的类型,而不是QVariant本身。

演示:

>>> from PyQt4.QtCore import QVariant
>>> v = QVariant(100)
>>> v.typeName()
'int'
>>> v.convert(QVariant.String)
True
>>> v.typeName()
'QString'

to*()函数返回转换为请求类型的变量值(如果可能),但不要更改QVariant本身的当前类型:

>>> v.toInt()
(100, True)
>>> v.typeName()
'QString'