在setHtml()之后恢复QWebView的滚动条位置

时间:2013-06-12 08:29:16

标签: qt qtwebkit

我不断生成我在QWebView中显示的新HTML页面。如果HTML包含图像,我现在无法在setHtml()调用后恢复垂直滚动条的当前位置。滚动条总是跳回到顶部。

只要HTML仅包含文本:

,以下代码就可以正常工作
void MainWindow::htmlResultReady(const QString &html)
{
     // remember scrollbar position
     int scrollBarPos = ui->webView->page()->mainFrame()->scrollBarValue(Qt::Vertical);

     ui->webView->setHtml(html);

     // restore previous scrollbar position
     ui->webView->page()->mainFrame()->setScrollBarValue(Qt::Vertical, scrollBarPos);
}

我还尝试使用信号QWebView :: loadFinished()但没有成功:

void MainWindow::setupHtmlPreview()
{
     connect(ui->webView, SIGNAL(loadFinished(bool)),
             this, SLOT(restoreScrollBarPosition()));
}

void MainWindow::htmlResultReady(const QString &html)
{
     // remember scrollbar position
     scrollBarPos = ui->webView->page()->mainFrame()->scrollBarValue(Qt::Vertical);

     ui->webView->setHtml(html);
}

void MainWindow::restoreScrollBarPosition()
{
     // restore previous scrollbar position
     ui->webView->page()->mainFrame()->setScrollBarValue(Qt::Vertical, scrollBarPos);
}

1 个答案:

答案 0 :(得分:2)

也许页面的大小会发生变化。在框架发出setScrollBarValue时调用contentsSizeChanged(通常为webView->page()->mainFrame())。