我有一个QScrollArea,它包含一个QVidget,它有一个QVBoxLayout。我想实现一个无限滚动,当你得到80%到滚动的底部时,它会加载更多的项目,这样你就可以滚动更多。
问题在于,当我达到80%并尝试向QVBoxLayout添加更多项目时,所有项目都会向上移动,以便您可以看到所有新项目。在添加新项目时,如何让QScrollArea保持在相同的相对位置?
答案 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()以滚动到该位置。