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

おそらく、ページのサイズが変更されます。がフレームによって発行されたsetScrollBarValueときに呼び出します (通常は)。contentsSizeChangedwebView->page()->mainFrame()

于 2013-06-14T19:55:23.233 に答える