首页 > 解决方案 > 右键单击QTableView的未占用区域时如何触发事件

问题描述

我有一个基本上由QTableView. 当右键单击表格视图的未占用区域时,我想显示一个上下文菜单。QTableWidget有一种itemAt方法可以解决问题,但不幸的是,为了满足我的目的,我必须使用QTableView缺少这种方法的方法。我也尝试使用事件过滤器但没有成功。你知道实现这一目标吗?

标签: pythonpyqt

解决方案


您必须使用该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()

推荐阅读