2010-07-10 3 views
4

Я предполагаю, что это должно быть простая задача: изменить содержимое QWebView (он всегда содержит несколько страниц материала), а затем прокрутить страницу назад в прежнем положении:как прокрутить страницу внутри qwebview?

y = self.webView.page().mainFrame().scrollPosition().y() 
self.webView.setHtml(looong_html_text) 
if y != 0: 
    self.webView.scroll(0, y) 
    self.webView.page().mainFrame().scroll(0, y) 
    self.webView.page().mainFrame().setScrollPosition(QPoint(0, y)) 
    print(self.webView.page().mainFrame().scrollPosition().y()) 

Но 3 команды внутри, если полностью бесполезно: страница прокручивается вверх. Что случилось?

ответ

2

Это немного догадка:

setScrollPosition не позволит вам прокручивать за пределы конца страницы.

Поскольку вы прокручиваете страницу до отображения страницы, эффективная высота страницы равна 0. Вы можете проверить это, установив self.webView.page(). MainFrame(). ContentSize()

Возможно, вам нужно выполнить прокрутку при запуске contentSizeChanged.

+0

Я поместил этот конкретный QWebView в QScrollArea, но то, что вы сказали, кажется разумным, я буду проверять его в ближайшее время с другим QWebView. Спасибо. –

+0

, наконец, я попытался сохранить позицию прокрутки до обновления содержимого (self.scrollpos = aWebView.page(). MainFrame(). ScrollPosition()), а затем восстановить его в событии contentSizeChanged, как было предложено (aWebView.page(). мэйнфрейм(). setScrollPosition (self.scrollpos)). и это работает. Большое спасибо. –

1

использовать этот код

 ui->webView->page()->mainFrame()->scroll(ui->webView->page()->mainFrame()->contentsSize().width(), ui->webView->page()->mainFrame()->contentsSize().height()); 

 Смежные вопросы

  • Нет связанных вопросов^_^