0

我正在尝试将 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.toSize 才能使 x 的类型成为 QSize?我预计 x.convert() 会使 x 成为 QSize 的实例。

这对我没有多大帮助...... http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qvariant.html#convert ...因为它说convert()“投射请求类型的变体......”

谢谢您的帮助!

4

1 回答 1

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'
于 2012-09-07T23:22:26.043 回答