0

我正面临一个让我发疯的问题。也许这很容易,但我看不到罪魁祸首。

我有一个简单的类,它将 QListWidget 的 currentItemChanged 信号连接到同一类的自定义插槽。这个信号有一个 (QListWidgetItem*, QListWidgetItem*) 签名(没有重载的同名信号)。Slot只有一个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'>- 这完全没问题,所以收到的“项目”又是一个 QListWidgetItem。数据方法调用似乎适合我 - 有人知道吗?

4

1 回答 1

1

我的天啊。我忙着在老虎机边寻找答案,以至于我没有看到所有树木中的森林......

连接签名错误。我正在调用插槽而不是将其传递给信号处理程序:

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

解决了这个问题。有时将问题抛诸脑后是件好事。帮助您退后一步,忽略您的所作所为;-)

于 2013-06-10T08:30:58.737 回答