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 を呼び出しますが、何も表示されません。
self.page().history().canGoBack()
編集: WebPage.history() を見つけ、次を key-b トラップに追加しました: self.page().history().back()self.page().history().back()
何もしません。しかし、別のリンク start->A->B をクリックすると、今では canGoBack() が実行され、ページ A に戻ります。しかし、setHtml() でロードされた元のページに戻ることはできません。
結論: WebView.setHtml() は WebPage.history にエントリを作成しません。これにより、backAction が機能しないように見える理由が説明できます...
さらに編集: Qt アシスタントでフォローアップすると、QWebFrame.setHtml() の下で、「注: このメソッドはセッションまたはグローバル履歴には影響しません...」と認めていることがわかりました。 . 実際、それは理にかなっています: 履歴項目は通常、単なる URL であるため、20K または 50K の html テキストを履歴項目として保存したくないのはそれほど奇妙ではありません。