質問: C++もQtも初心者ですので初歩的な間違いや勘違いを多くしているかもしれませんが、申し訳ありませんがどうかお付き合いください。 C++/Qt5でプログラムを作っていますが、そのUIにQWebViewを使っています。 テンプレートのHTMLファイルを読み込み(QFileやQTextStreamを使ってQStringへと読み込み、QWebFrame::setHtmlに渡しています)、QWebFrame::findFirstElementで場所を検索し、QWebElement::appendInsideで表示したいデータを流し込むような形で作っています。 プログラムの用途上、何度もテンプレートから読み込みなおして作りなおす場面が登場するのですが、その時にスクロール位置を固定したいと思っています。そこで、QWebFrame::scrollPositionで現在のスクロール位置を取得しておき、テンプレートを読みUIを作りなおしてから、QWebFrame::setScrollPositionで元の位置に戻そうと考えました。 ですがsetScrollPositionを実行しても画面に反映されません。適宜qDebugでscrollPositionで得られたQPointの中身を見てみても、正常に値は取得出来ているようです(setScrollPositionだけが動作していない?)。引数にQPoint(x,y)で決め打ちで渡しても動いていないようです。 UIを作りなおす部分を省いた状態で(画面をリロードせず)setScrollPositionを実行すると期待した通りの動作となります。 そこで、 ・scrollPosition、setScrollPositionとはこのような使い方で正しいでしょうか? ・他に考えられる手はありますでしょうか? なかなか要領を得ない質問文となってしまいましたが、よろしくお願い致します。
回答: QWebElement::appendInside の実行時にはコンテンツのサイズの再計算が行われない(遅延されているか、表示時に行われる)ため、スクロール位置の調整もコンテンツのサイズの再計算が行われた後にする必要があるようです。