我有一个简单的小部件,它是 QWebView。我用 setHtml() 加载它。大多数时候这只是为了让用户可以阅读样式化的文本,但是有一些链接,如果单击一个,QWebView 会正确显示链接的页面,但现在无法返回原始页面. 我想实现一个返回键快捷方式(或者可能是一个返回按钮,但问题是一样的)。而且我不知道如何告诉我的 QWebView 或其 QWebPage 这样做。一些代码尝试了我能想到的一切:
class helpDisplay(QWebView):
def __init__(self, parent=None ):
super(helpDisplay, self).__init__(parent)
self.backAction = self.page().action(QWebPage.Back)
self.backAction.setEnabled(True) # initially was False
self.backAction.setShortcut(QKeySequence.Back) # was empty, now ctl-[
...
self.setHtml(...) # big string input from a file
...
def keyPressEvent(self, event): # trap keys
if event.key() == Qt.Key_B: # temporary for testing
self.page().triggerAction(QWebPage.Back)
self.backAction.activate(QAction.Trigger)
这些都不会导致从链接向后导航。点击 ctl-[ 什么都不做。点击“b”进入 keyPressEvent 陷阱并调用 triggerAction 并激活,但没有任何可见的反应。
编辑:找到 WebPage.history(),并将以下内容添加到 key-b 陷阱:self.page().history().back() 这有点工作:如果我单击链接 start->A,self.page().history().canGoBack()
则为 False 和self.page().history().back()
什么也没做。但是,如果我单击另一个链接 start->A->B,现在它可以GoBack() 并返回页面 A。但我无法返回使用 setHtml() 加载的原始页面。
结论:WebView.setHtml() 不会在 WebPage.history 中创建条目。这可以解释为什么 backAction 似乎不起作用......
进一步编辑:在 Qt 助手中跟进我发现在 QWebFrame.setHtml() 下它承认,“注意:此方法不会影响会话或全局历史......”不幸的是,他们没有将该注释带回 QWebPage 或 QWebView . 事实上,这是有道理的:历史项目通常只是一个 URL,因此他们不想将 20K 或 50K 的 html 文本存储为历史项目,这并不奇怪。