Как мне оставаться в той же позиции прокрутки при добавлении элементов в Qt?

У меня есть QScrollArea, который содержит QWidget, который имеет QVBoxLayout. Я хочу реализовать бесконечную прокрутку, при которой, когда вы получаете 80% до нижней части прокрутки, он загружает больше элементов, чтобы вы могли прокручивать еще больше.

Проблема в том, что когда я добираюсь до 80% и пытаюсь добавить больше элементов в QVBoxLayout, все элементы сдвигаются вверх, так что вы видите все новые элементы. Как я могу заставить QScrollArea оставаться в том же относительном месте, пока добавляются новые элементы?

1

Решение

Сохраните абсолютную позицию перед добавлением элементов, затем восстановите ее после добавления элементов. Как так (не проверено). Поведение по умолчанию, по-видимому, сохраняет относительную позицию, и это именно то, что вы не хотите.

Обратите внимание, что это работает, только если вы добавляете элементы.

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

Другие решения

Это похоже на комментарий jdi: я использовал значение QScrollBar, чтобы получить текущую позицию QScrollArea, затем перебрал QLayout и проверил QLayoutItem-> geometry () каждого дочернего элемента, чтобы увидеть, какой дочерний элемент был ближайшим к вершине. , Затем, после вставки, я сделал QWidget-> geometry (), чтобы получить высоту этого элемента, а затем QScrollBar-> setValue (), чтобы прокрутить до этого места.

0

По вопросам рекламы [email protected]