2

で示されるモデルの最後に項目を追加する場合QAbstractItemView、ビューをデータの下部に保持して、最近追加された項目を表示したいと考えています。デフォルトの動作は、最後に表示されたアイテムの位置を保持することですが、一番下にいた場合はスクロールしません。

ユーザーが以前にビューを一番下までスクロールしたことがある場合、ビューを一番下に保つために必要な魔法は何でしょうか?

4

1 に答える 1

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(); });
于 2016-08-05T19:25:54.313 に答える