gpt4 book ai didi

qt - 如何在 QWebView/QWebPage 中实现 "back" Action

转载 作者:行者123 更新时间:2023-12-01 05:30:54 24 4
gpt4 key购买 nike

我有一个简单的小部件,它是 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 和 activate,但没有任何可见的发生。

编辑:找到 WebPage.history(),并将以下内容添加到 key-b 陷阱:
self.page().history().back()
这有点有效:如果我单击链接开始-> A, self.page().history().canGoBack()是假的和 self.page().history().back()什么也没做。但是,如果我单击另一个链接 start->A->B,现在它 canGoBack() 并返回到页面 A。但我无法返回到加载了 setHtml() 的原始页面。

结论:WebView.setHtml() 不会在 WebPage.history 中创建条目。这可以解释为什么 backAction 似乎不起作用......

进一步编辑:在 Qt 助手中跟进,我发现在 QWebFrame.setHtml() 下它承认,“注意:此方法不会影响 session 或全局历史记录......”不幸的是,他们没有将该注释带回 QWebPage 或 QWebView .事实上这是有道理的:历史项目通常只是一个 URL,所以他们不想将 20K 或 50K 的 html 文本存储为历史项目并不太奇怪。

最佳答案

只是为了减少你的一些代码,QWebView 确实有一个 back() 槽:http://doc.qt.io/archives/qt-4.7/qwebview.html#back .

除此之外,由于您发现 setHtml() 的使用显然不会创建历史条目,您可以尝试以下建议之一:

使用您的历史检查来查看它是否可以返回。如果可以,就回去。如果它无法使用原始源再次运行 setHtml,因为您知道它是显示的第一页。

或者,将您的页面写入临时 html 文件并使用 load() 方法代替 file:///url。这可能会成为历史记录。

关于qt - 如何在 QWebView/QWebPage 中实现 "back" Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11238151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com