2012-10-11 39 views
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)

+0

我可以用PyQt 4.8.5和sip 4.12.4來確認行爲,使用api = 2。我建議你在PyQt4郵件列表中報告一個錯誤。 – Vicent

+0

我不知道QVariant如何在PyQt中工作,但在C++中QVariant的類型不是內置類型,而是將指針存儲在QVariant中而不是調用操作符==,這就是爲什麼搜索可能不起作用 –

+0

這可能更像是一個限制而不是bug。在幕後,PyQt必須嘗試爲某些操作轉換Python類型。顯然,並非所有類型/操作的組合都受支持。可變性似乎是一個限制因素。如果元組交換爲列表,上面的示例代碼將起作用。 – ekhumoro

回答

1

從@ ekhumoru的評論上面,用列表替換元組是一個合適的解決辦法:(我epmhasis)

這可能更多的是一個限制,而不是一個錯誤。在 場景的背後,PyQt必須嘗試轉換某些 操作的Python類型。顯然,並非所有類型/操作的組合都支持 。可變性似乎是一個限制因素。 如果元組 交換爲列表,上面的示例代碼將工作。