我需要在上下文菜单中重新实现 QWebView 的“复制链接”,以便在例程中执行其他操作。
复制链接是唯一在 ajax 站点内真正有效的链接,因此我试图重新实现通过此方法传递的“从链接下载”。
问题是我不知道如何重新实现用于检索 URL 的“复制链接”的基本功能。
请您参考如下方法:
您可以通过重新实现 QWebView.contextMenu 添加额外的菜单项并使用 QWebPage.createStandardContextMenu 生成标准菜单.
然后你需要做的就是得到一个hit-test result从请求上下文菜单的位置为您提供 url(如果有的话)。
这是一个基本思想的简单演示:
from PyQt4 import QtGui, QtWebKit
class Browser(QtWebKit.QWebView):
def __init__(self):
super(Browser, self).__init__()
self.setHtml('''
<html><head><title>Test Page</title>
<body>
<p><a href="https://stackoverflow.com">link</a></p>
</body>
</html>
''')
def contextMenuEvent(self, event):
menu = self.page().createStandardContextMenu()
hit = self.page().currentFrame().hitTestContent(event.pos())
url = hit.linkUrl()
if not url.isEmpty():
menu.addSeparator()
action = menu.addAction('Download')
action.triggered.connect(lambda: self.download(url))
menu.exec_(event.globalPos())
def download(self, url):
print('download:', url)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
browser = Browser()
browser.setGeometry(800, 200, 400, 200)
browser.show()
sys.exit(app.exec_())
