1
我不能讓QComboBox::findData
在我的PyQt應用程序中正常工作。PyQt:我如何找到使用QComboBox :: findData()的元組?
似乎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(自動轉換的QVariant < - >蟒蛇)沒有找到任何東西,我得到下面的輸出:
-1
-1
(1, 2)
(3, 4)
-1
-1
符合API = 1(無自動-convert),它只是發現它在後者(沒用)情況:
-1
-1
<PyQt4.QtCore.QVariant object at 0x02FBF148>
<PyQt4.QtCore.QVariant object at 0x02FBF148>
0
1
任何想法如何得到第一個案子(findData新的元組,並自動轉換的QVariant)?
(使用PyQt的4.8.3,SIP 4.12.1和Qt 4.6.1)
我可以用PyQt 4.8.5和sip 4.12.4來確認行爲,使用api = 2。我建議你在PyQt4郵件列表中報告一個錯誤。 – Vicent
我不知道QVariant如何在PyQt中工作,但在C++中QVariant的類型不是內置類型,而是將指針存儲在QVariant中而不是調用操作符==,這就是爲什麼搜索可能不起作用 –
這可能更像是一個限制而不是bug。在幕後,PyQt必須嘗試爲某些操作轉換Python類型。顯然,並非所有類型/操作的組合都受支持。可變性似乎是一個限制因素。如果元組交換爲列表,上面的示例代碼將起作用。 – ekhumoro