PyQt4.QtCore.QVariant对象而不是字符串?


问题内容

我按照下面的示例Key / Value pyqt
QComboBox进行操作
,使用以下代码将ID值存储到组合框项目中。

self.combox_widget.addItem('Apples', 'Green')
indx = self.combox_widget.currentIndex()
print self.combox_widget.itemData(indx)

但是,我继续<PyQt4.QtCore.QVariant object at 0x02AC1A70>尝试检索DATA值(以上示例中的“绿色”)。我在这里想念什么?


问题答案:

大多数设置和检索任意“数据”的Qt API都会将其存储为QVariant。

对于 Python2 ,默认情况下,PyQt会在您设置它时自动将python对象 转换 为QVariant,但在您 检索
它时不会自动将其再次转换回QVariant 。因此,您必须采取额外的步骤来做到这一点:

    print self.combox_widget.itemData(indx).toPyObject()

对于 Python3 ,默认情况下,始终总是在两个方向上自动完成转换,因此不需要额外的步骤。

要解决此差异,PyQt提供了一种使用sip模块来显式设置默认模式的方法:

import sip
sip.setapi('QVariant', 2)
from PyQt4 import QtCore, QtGui

在导入其他PyQt模块 之前 ,需要 程序开始时执行一次此操作,这将确保任何Qt API都不会返回QVariant。