QVBoxLayoutを持つQWidgetを含むQScrollAreaがあります。無限スクロールを実装して、スクロールの下部に 80% 到達すると、より多くのアイテムをロードして、さらにスクロールできるようにしたいと考えています。
問題は、80% に達して QVBoxLayout にさらに項目を追加しようとすると、すべての項目が上に移動して、すべての新しい項目が表示されることです。新しいアイテムが追加されている間、QScrollArea を同じ相対的な場所にとどめるにはどうすればよいですか?
QVBoxLayoutを持つQWidgetを含むQScrollAreaがあります。無限スクロールを実装して、スクロールの下部に 80% 到達すると、より多くのアイテムをロードして、さらにスクロールできるようにしたいと考えています。
問題は、80% に達して QVBoxLayout にさらに項目を追加しようとすると、すべての項目が上に移動して、すべての新しい項目が表示されることです。新しいアイテムが追加されている間、QScrollArea を同じ相対的な場所にとどめるにはどうすればよいですか?
アイテムを追加する前に絶対位置を保存し、アイテムを追加した後に復元します。そのように(未テスト)。デフォルトの動作は明らかに相対位置を保持しますが、それはまさにあなたが望んでいないことです。
これは、アイテムを追加する場合にのみ機能することに注意してください。
void code() {
//...
QScrollBar * bar;
const int savedPos = bar->value();
// add items here
bar->setValue(savedPos);
//...
}
これは jdi のコメントに沿ったものです。QScrollBar の値を使用して QScrollArea の現在の位置を取得し、次に QLayout をループして、各子の QLayoutItem->geometry() をチェックして、どの子が一番上にあったかを確認しました. 次に、挿入した後、 QWidget->geometry() を実行してそのアイテムの高さを取得し、続いて QScrollBar->setValue() を実行してその場所までスクロールしました。