python - 右键单击QTableView的未占用区域时如何触发事件
问题描述
我有一个基本上由QTableView
. 当右键单击表格视图的未占用区域时,我想显示一个上下文菜单。QTableWidget
有一种itemAt
方法可以解决问题,但不幸的是,为了满足我的目的,我必须使用QTableView
缺少这种方法的方法。我也尝试使用事件过滤器但没有成功。你知道实现这一目标吗?
解决方案
您必须使用该indexAt()
方法并验证该方法QModelIndex
无效:
from PyQt5.QtGui import QStandardItemModel
from PyQt5.QtWidgets import QApplication, QMenu, QTableView
class TableView(QTableView):
def contextMenuEvent(self, event):
super().contextMenuEvent(event)
ix = self.indexAt(event.pos())
if not ix.isValid():
menu = QMenu()
menu.addAction("foo")
menu.addAction("bar")
menu.addAction("baz")
menu.exec_(event.globalPos())
def main():
app = QApplication([])
view = TableView()
view.resize(640, 480)
view.show()
model = QStandardItemModel(4, 5)
view.setModel(model)
app.exec_()
if __name__ == "__main__":
main()