如何在添加项目时将项目视图滚动到底部?

时间:2016-08-05 19:25:54

标签: qt c++11 model-view-controller qt5 qabstractitemview

QAbstractItemView显示的模型末尾附加项目时,我希望将视图保留在数据的底部,显示最近添加的项目。默认行为是保留最近显示的项目的位置,但如果我们位于底部则不滚动。

如果用户之前已将视图一直滚动到底部,那么将视图保持在底部需要什么样的魔力呢?

1 个答案:

答案 0 :(得分:2)

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(); });