2

QComboBox::findDataPyQt アプリケーションで正しく動作しません。

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<->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

最初のケースを機能させる方法 (新しいタプルを使用して findData を取得し、QVariant を自動変換する方法) はありますか?

(PyQt 4.8.3、SIP 4.12.1、および Qt 4.6.1 を使用)

4

1 に答える 1

2

上記の@ekhumoruのコメントから、タプルをリストに置き換えることが適切な回避策です:(私のepmhasis)

これはおそらくバグというよりも制限です。バックグラウンドで、PyQt は特定の操作のために Python 型の変換を試行する必要があります。明らかに、タイプ/操作のすべての組み合わせがサポートされているわけではありません。可変性は 1 つの制限要因のようです。タプルがリストと交換される場合、上記のコード例は機能します。

于 2012-10-12T12:36:04.847 に答える