У меня есть простой виджет, который является QWebView. Я загружаю его с помощью setHtml(). В большинстве случаев это просто так, что пользователь может читать стилизованный текст, однако есть несколько ссылок, и если его нажимают, QWebView правильно отображает связанную страницу, но теперь нет способа вернуться к исходной странице , Я хочу реализовать комбинацию клавиш «Назад» (или, возможно, кнопку «Назад», но проблема такая же). И я не могу понять, как сказать мой QWebView или его QWebPage для этого. Какой-то код пытается все, что я могу придумать:Как реализовать «обратное» действие в 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 и активируется, но ничего не происходит.
Edit: найден WebPage.history(), и добавил следующий ключ-б ловушка:.. self.page() история() обратно() Это своего рода работает: если я нажимаю ссылку Пуск- > A, self.page().history().canGoBack()
False и self.page().history().back()
ничего не делает. Однако, если я нажму другую ссылку start-> A-> B, сейчас, она можетGoBack() и делает, обратно на страницу A. Но я не могу вернуться к исходной странице, загруженной с помощью setHtml().
Вывод: WebView.setHtml() не создает запись в WebPage.history. Это может объяснить, почему backAction не работает ...
Дальнейшее редактирование: После выполнения в Qt Assistant я обнаружил, что под QWebFrame.setHtml() он допускает: «Примечание: этот метод не повлияет на сеанс или глобальный история ... »К сожалению, они не перенесли эту заметку в QWebPage или QWebView. На самом деле это имеет смысл: элемент истории обычно будет просто URL-адресом, поэтому не слишком странно, что они не захотят хранить 20K или 50K html-текста в качестве элемента истории.
Ой, как я пропустил это? О, back() находится в списке слотов, а не в членах. Говорит, что это то же самое, что и «view-> page() -> triggerPageAction (QWebPage :: GoBack);», что в основном я пытаюсь сделать (кроме того, нет имени действия «GoBack», только «Назад»). – user405
В любом случае, спасибо. Я работал над вашим решением: сохраняйте строку setHtml и перезагружайте ее, когда история пуста. Фактически можно отслеживать сигнал linkClicked, чтобы знать, что ссылка была соблюдена, и, следовательно, знать, что не нужно делать лишнюю перезагрузку, если обратный ключ попадает в дополнительное время. Но я также рассмотрю вашу идею временного файла. – user405