2

我无法QComboBox::findData在我的 PyQt 应用程序中正常工作。

似乎 PyQt 没有正确比较 QVariant 和 Python 元组,导致 Qt 找不到我的元组。示例如下:

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

a = Qt.QApplication([])

cb = Qt.QComboBox()
cb.addItem("Bah", (1,2))
cb.addItem("Foo", (3,4))

print cb.findData((1,2))
print cb.findData((3,4))

print cb.itemData(0)
print cb.itemData(1)

print cb.findData(cb.itemData(0))
print cb.findData(cb.itemData(1))

使用 api=2 (auto-convert QVariant<->python) 它找不到任何东西,我得到以下输出:

-1
-1
(1, 2)
(3, 4)
-1
-1

使用 api=1 (没有自动转换),它只会在后一种(无用)情况下找到它:

-1
-1
<PyQt4.QtCore.QVariant object at 0x02FBF148>
<PyQt4.QtCore.QVariant object at 0x02FBF148>
0
1

知道如何让第一个案例工作(使用新元组查找数据,并自动转换 QVariant)吗?

(使用 PyQt 4.8.3、SIP 4.12.1 和 Qt 4.6.1)

4

1 回答 1

2

从上面@ekhumoru 的评论中,用列表替换元组是一个合适的解决方法:(我的epmhasis)

这可能更多的是限制而不是错误。在幕后,PyQt 必须尝试为某些操作转换 Python 类型。显然,并非所有类型/操作的组合都受支持。可变性似乎是一个限制因素。如果将元组交换为列表,则上面的示例代码将起作用。

于 2012-10-12T12:36:04.847 回答