【问题标题】:how to scroll a page inside a qwebview?如何在 qwebview 中滚动页面?
【发布时间】:2014-11-02 02:33:48
【问题描述】:

我想这应该是一个简单的任务:更改 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())

但是 if 里面的 3 个命令完全没用:页面滚动回到顶部。 怎么了?

【问题讨论】:

    标签: python pyqt qwebview


    【解决方案1】:

    这有点猜测:

    setScrollPosition 不会让您滚动到页面末尾之外。

    由于您在页面显示之前滚动,因此页面的有效高度当时为 0。您可以通过检查 self.webView.page().mainFrame().contentSize() 来验证这一点

    也许您应该在触发 contentSizeChanged 时进行滚动。

    【讨论】:

    • 我已经将那个特定的 qwebview 放在了一个 qscrollarea 中,但是你说的似乎有道理,我会尽快用另一个 qwebview 来检查它。谢谢。
    • 最后,我尝试在更新内容之前保存滚动位置(self.scrollpos = aWebView.page().mainFrame().scrollPosition()),然后按照建议在 contentSizeChanged 事件中恢复(aWebView.page().mainFrame().setScrollPosition(self.scrollpos))。它有效。非常感谢。
    【解决方案2】:

    使用此代码

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

    【讨论】:

      猜你喜欢
      • 2019-01-16
      • 1970-01-01
      • 2013-11-10
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多