【问题标题】:How to keep an item view scrolled to the bottom when items are added?添加项目时如何保持项目视图滚动到底部?
【发布时间】:2016-12-12 07:09:54
【问题描述】:

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

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

【问题讨论】:

    标签: qt c++11 model-view-controller qt5 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(); });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-21
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      相关资源
      最近更新 更多