如何将QTableView连接到右键菜单

时间:2017-05-10 17:03:46

标签: qt pyqt pyqt4 pyqt5

使用较旧的语法,我们必须使用QtCore.SIGNAL("customContextMenuRequested(QPoint)"

现在随着Qt5的出现,旧的QtCore.SIGNAL语法不再酷,因为它变得绝对。

如何修改下面发布的工作PyQt4代码以使其与PyQt5兼容(仅关注连接右键菜单)?

class TableView(QtGui.QTableView):
    def __init__(self, parent):
        QtGui.QTableView.__init__(self, parent)
        self.rcMenu=QtGui.QMenu(self)
        self.rcMenu.addAction('My Action')
        self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.connect(self, QtCore.SIGNAL("customContextMenuRequested(QPoint)" ), self.onRightClick)

def onRightClick(self, QPos=None):       
    parent=self.sender()
    pPos=parent.mapToGlobal(QtCore.QPoint(5, 20))
    mPos=pPos+QPos

    self.rcMenu.move(mPos)
    self.rcMenu.show()

1 个答案:

答案 0 :(得分:-1)

替换:

self.connect(self, QtCore.SIGNAL("customContextMenuRequested(QPoint)" ), self.onRightClick)

使用:

self.customContextMenuRequested.connect(self.onRightClick)

class TableView(QtGui.QTableView):
    def __init__(self, parent):
        QtGui.QTableView.__init__(self, parent)
        self.rcMenu=QtGui.QMenu(self)
        self.rcMenu.addAction('My Action')
        self.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.customContextMenuRequested.connect(self.onRightClick)

def onRightClick(self, QPos=None):       
    parent=self.sender()
    pPos=parent.mapToGlobal(QtCore.QPoint(5, 20))
    mPos=pPos+QPos

    self.rcMenu.move(mPos)
    self.rcMenu.show()