在 a 显示的模型末尾附加项目时QAbstractItemView
,我希望将视图保留在数据的底部,显示最近添加的项目。默认行为是保留最近显示的项目的位置,但如果我们在底部,则不滚动。
如果用户之前一直滚动到底部,将视图保持在底部需要什么魔法?
在 a 显示的模型末尾附加项目时QAbstractItemView
,我希望将视图保留在数据的底部,显示最近添加的项目。默认行为是保留最近显示的项目的位置,但如果我们在底部,则不滚动。
如果用户之前一直滚动到底部,将视图保持在底部需要什么魔法?
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(); });