检查点击是在单元格上还是在 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
但正如我发现的那样,该事件从未被接受。我想我在这里做了一些愚蠢的错误。现在 mouseDoubleClickEvent
的 if
被调用 每次 双击和 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
有一个固定大小的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
但正如我发现的那样,该事件从未被接受。我想我在这里做了一些愚蠢的错误。现在 mouseDoubleClickEvent
的 if
被调用 每次 双击和 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