Как сохранить вид элемента при прокрутке вниз при добавлении элементов?
При добавлении элементов в конце модели, показанной QAbstractItemView
Я хочу сохранить вид внизу данных, показывая самые последние добавленные элементы. Поведение по умолчанию состоит в том, чтобы сохранить позицию последнего отображаемого элемента, но не прокручивать, если бы мы были внизу.
Какая магия необходима для того, чтобы держать представление внизу, если пользователь предварительно прокрутил его до самого дна?
1 ответ
QListView view;
bool viewAtBottom = false;
Перед добавлением элемента проверьте, прокручивается ли представление до конца.
connect(view.model(), &QAbstractItemModel::rowsAboutToBeInserted,
&view, [&] {
auto bar = view.verticalScrollBar();
viewAtBottom = bar ? (bar->value() == bar->maximum()) : false;
});
После того, как элемент вставлен, прокрутите его до конца, если до добавления элемента был вид внизу.
connect(view.model(), &QAbstractItemModel::rowsInserted,
&view, [&]{ if (viewAtBottom) view.scrollToBottom(); });