检查点击是在单元格上还是在 QTableWidget 内空闲 space

Check if click is on cell or free space inside QTableWidget

有一个固定大小的QTableWidget,有一些行和列,QTableWidget 的其余部分是空白且未被占用的。如果用户双击一个单元格,应该显示一个对话框,如果用户双击 QTableWidget 的空白区域,一个新行应该附加到 table.

我试过这样解决:

class TableWidget(QTableWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.doubleClicked.connect(self.cellDoubleClicked)

    def cellDoubleClicked(self):
        # display dialog here # 

    def mouseDoubleClickEvent(self, event: QtGui.QMouseEvent) -> None:
        event.ignore()
        super().mouseDoubleClickEvent(event)
        if not event.isAccepted():
            # add row to table
        return

但正如我发现的那样,该事件从未被接受。我想我在这里做了一些愚蠢的错误。现在 mouseDoubleClickEventif 被调用 每次 双击和 cellDoubleClicked 只有当我双击一个单元格时。我试图通过查看 currentIndex 来区分这些事件,但它始终指向所选的最新索引,即使在调用 clearSelection 之后也是如此。有没有根据我的代码残端解决这个问题的选项,还是一直都错了?

比那容易得多:如果位置不对应于现有项目,则使用 indexAt(pos) 其中 returns 一个 无效 索引。

class TableWidget(QTableWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def mouseDoubleClickEvent(self, event: QtGui.QMouseEvent) -> None:
        super().mouseDoubleClickEvent(event)
        index = self.indexAt(event.pos())
        if index.isValid():
            # show dialog
        else:
            # add row to table