在 QTableWidgetItem 中设置 mousePressEvent 处理程序

Setting a mousePressEvent handler in a QTableWidgetItem

我有一个 QTableWidget 填充了几个 QTableWidgetItem 对象。我正在尝试向我的 QTableWidget 对象添加一个 mousePressEvent 侦听器。

我现在的代码很简单:

class TaskCell(QTableWidgetItem):
    def __init__(self, text, parent):
        super().__init__(text)
        self.parent = parent

    def mousePressEvent(self, event):
        print("Mouse clicked on cell with parent" + self.parent.id)

这对我来说似乎很简单,但不幸的是它不起作用。我不能将 mousePressEvent 添加到 QTableWidgetItem 对象吗?谢谢你。

QTableWidgetItem不是一个可视元素而是一个信息容器,所以它没有类似mousePressEvent的方法。要做的是覆盖 QTableWidget 的 mousePressEvent 方法并获取 TaskCells:

class TableWidget(QtWidgets.QTableWidget):
    def mousePressEvent(self, event):
        super().mousePressEvent(event)
        item = self.itemAt(event.pos())
        if isinstance(item, TaskCell):
            print("Mouse clicked on cell with parent {}".format(item.parent.id))