2

我有一个 QScrollArea,其中包含一个 QWidget,它有一个 QVBoxLayout。我想实现一个无限滚动,当你到达滚动底部的 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 回答