我坐在一个让我疯狂的问题面前。也许这很容易,但我看不出罪魁祸首。
我有一个简单的类,它将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)
时,它会显示:<class 'PySide.QtGui.QListWidgetItem'>
- 这是完全正常的,因此收到的“item”再次是一个QListWidgetItem。数据方法调用似乎适合我 - 有人有想法吗?
答案 0 :(得分:1)
OMG。 我忙着在插槽一侧找到答案,我没有看到所有树林中的森林......
连接签名错误。我正在调用插槽而不是将其传递给信号处理程序:
self.ui.listWidget.currentItemChanged.connect(self.showDetails)
解决了这个问题。 有时将问题抛到野外是件好事。帮助您退后一步,忽略您的所作所为; - )