将项添加到标准QWebView上下文菜单

时间:2016-08-15 07:44:53

标签: python qt4 pyqt4 contextmenu qwebview

QWebView的实现有一个标准的上下文菜单。我想改变它并创建我自己的 - 或者添加"在新标签中打开"到标准上下文菜单,然后将其连接到我的应用程序。怎么做?

1 个答案:

答案 0 :(得分:4)

您可以重新实现QWebView.contextMenuEvent

class WebView(QtWebKit.QWebView):
    def __init__(self, parent=None):
        super(WebView, self).__init__(parent)
        self.newTabAction = QtGui.QAction('Open in new tab', self)
        self.newTabAction.triggered.connect(self.createNewTab)

    def createNewTab(self):
        url = self.newTabAction.data()
        print('create new tab:', url.toString())

    def contextMenuEvent(self, event):
        menu = self.page().createStandardContextMenu()
        hit = self.page().currentFrame().hitTestContent(event.pos())
        url = hit.linkUrl()
        if url.isValid():
            self.newTabAction.setData(url)
            menu.addAction(self.newTabAction)
        menu.exec_(event.globalPos())

如果您不想使用标准上下文菜单,只需使用QtGui.QMenu()创建自己的菜单。