2010-07-10 4 views
4

Je suppose que cela devrait être une tâche simple: modifier le contenu d'un QWebView (il contient toujours plusieurs pages de choses) puis faites défiler la page retour dans la position précédente:comment faire défiler une page à l'intérieur d'un 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()) 

Mais les 3 commandes à l'intérieur du cas sont complètement inutile: la page défile vers le haut. Qu'est-ce qui ne va pas?

Répondre

2

C'est un peu une supposition:

setScrollPosition ne vous laissera pas faire défiler au-delà de la fin de la page.

Étant donné que vous faites défiler avant que la page ne s'affiche, la hauteur effective de la page est 0 à la fois. Vous pouvez vérifier cela en vérifiant self.webView.page(). MainFrame(). ContentSize()

Peut-être que vous devriez faire le défilement quand contentSizeChanged est déclenché.

+0

J'ai placé que qwebview particulier dans un QScrollArea, mais ce que vous avez dit semble raisonnable, je vais vérifier bientôt avec un autre qwebview. Je vous remercie. –

+0

Enfin, j'ai essayé d'enregistrer la position de défilement avant de mettre à jour le contenu (self.scrollpos = aWebView.page(). MainFrame(). ScrollPosition()), puis le restaurer dans l'événement contentSizeChanged comme suggéré (aWebView.page(). mainFrame(). setScrollPosition (self.scrollpos)). et il fonctionne. Merci beaucoup. –

1

utiliser ce code

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