で示されるモデルの最後に項目を追加する場合QAbstractItemView
、ビューをデータの下部に保持して、最近追加された項目を表示したいと考えています。デフォルトの動作は、最後に表示されたアイテムの位置を保持することですが、一番下にいた場合はスクロールしません。
ユーザーが以前にビューを一番下までスクロールしたことがある場合、ビューを一番下に保つために必要な魔法は何でしょうか?
で示されるモデルの最後に項目を追加する場合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(); });