2

QVBoxLayoutを持つQWidgetを含むQScrollAreaがあります。無限スクロールを実装して、スクロールの下部に 80% 到達すると、より多くのアイテムをロードして、さらにスクロールできるようにしたいと考えています。

問題は、80% に達して QVBoxLayout にさらに項目を追加しようとすると、すべての項目が上に移動して、すべての新しい項目が表示されることです。新しいアイテムが追加されている間、QScrollArea を同じ相対的な場所にとどめるにはどうすればよいですか?

4

2 に答える 2

2

アイテムを追加する前に絶対位置を保存し、アイテムを追加した後に復元します。そのように(未テスト)。デフォルトの動作は明らかに相対位置を保持しますが、それはまさにあなたが望んでいないことです。

これは、アイテムを追加する場合にのみ機能することに注意してください。

void code() {
  //...
  QScrollBar * bar; 
  const int savedPos = bar->value();
  // add items here
  bar->setValue(savedPos);
  //...
}
于 2012-09-09T05:41:25.557 に答える
0

これは jdi のコメントに沿ったものです。QScrollBar の値を使用して QScrollArea の現在の位置を取得し、次に QLayout をループして、各子の QLayoutItem->geometry() をチェックして、どの子が一番上にあったかを確認しました. 次に、挿入した後、 QWidget->geometry() を実行してそのアイテムの高さを取得し、続いて QScrollBar->setValue() を実行してその場所までスクロールしました。

于 2012-09-09T23:53:39.340 に答える