如何在Qt中添加项目时保持相同的滚动位置?

时间:2012-09-09 01:34:18

标签: c++ qt layout qscrollarea

我有一个QScrollArea,它包含一个QVidget,它有一个QVBoxLayout。我想实现一个无限滚动,当你得到80%到滚动的底部时,它会加载更多的项目,这样你就可以滚动更多。

问题在于,当我达到80%并尝试向QVBoxLayout添加更多项目时,所有项目都会向上移动,以便您可以看到所有新项目。在添加新项目时,如何让QScrollArea保持在相同的相对位置?

2 个答案:

答案 0 :(得分:1)

在添加项目之前保存绝对位置,然后在添加项目后将其恢复。像这样(未经测试)。默认行为显然保留了相对位置,这正是您不想要的。

请注意,仅当您附加项目时才有效。

void code() {
  //...
  QScrollBar * bar; 
  const int savedPos = bar->value();
  // add items here
  bar->setValue(savedPos);
  //...
}

答案 1 :(得分:0)

这与jdi的注释一致:我使用QScrollBar的值来获取QScrollArea的当前位置,然后我循环遍历QLayout并检查每个孩子的QLayoutItem-> geometry()以查看哪个孩子是最靠近顶部。然后,在我插入之后,我执行了QWidget-> geometry()来获取该项的高度,然后是QScrollBar-> setValue()以滚动到该位置。