1

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

只要 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);
}
4

1 回答 1

2

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

于 2013-06-14T19:55:23.233 回答