0

私は気が狂うような問題の前に座っています。簡単かもしれませんが、犯人が見えません。

QListWidget の currentItemChanged シグナルを同じクラスのカスタム スロットに接続する単純なクラスがあります。このシグナルには (QListWidgetItem*, QListWidgetItem*) シグネチャがあります (同じ名前のオーバーロードされたシグナルはありません)。スロットは 1 つの QListWidgetItem のみですが、これは問題ありません。コード スニペットを参照してください。

class Overview(QObject):
    def __init__(self, parent=None)
    #---SNIP---
    item = QListWidgetItem(spec.name)
    item.setData(Qt.UserRole, spec)
    self.ui.listWidget.currentItemChanged.connect(
                    self.showDetails(QListWidgetItem))

    @Slot(QListWidgetItem)
    def showDetails(self, item):
        if item:
            spec = item.data(Qt.UserRole) # <---- PROBLEM

このコードを実行すると、常にエラー メッセージが表示されます。

---SNIP---
    spec = item.data(Qt.UserRole)
TypeError: descriptor 'data' requires a 'PySide.QtGui.QListWidgetItem' object
but received a 'PySide.QtCore.Qt.ItemDataRole'

私はすべてを試しましたが、ここで何が問題なのかわかりません。print(item)スロットに aを入力する<class 'PySide.QtGui.QListWidgetItem'>と、次のように表示されます。データメソッド呼び出しは私にとって正しいようです - 誰かアイデアがありますか?

4

1 に答える 1

1

ああ、神様。スロット側で答えを見つけるのに忙しくて、すべての木の中に森が見えませんでした...

接続署名が間違っています。シグナル ハンドラに渡す代わりに、スロットを呼び出していました。

self.ui.listWidget.currentItemChanged.connect(self.showDetails)

問題を解決しました。質問を野放しにするのが良い場合もあります。一歩下がって、自分がしたことを見落とすのに役立ちます;-)

于 2013-06-10T08:30:58.737 に答える