我有一个QListView,其中包含我要插入数据的模型。我在列表的开头插入数据,导致视图中的所有项目向下滚动。
自动滚动视图以保持视图固定的最佳方法是什么(即当模型中插入新项目时,视图应随着可见项移动?)
答案 0 :(得分:2)
这似乎有效。问题实际上并没有滚动到特定的索引 - 它首先找到了正确的索引。
以下代码滚动视图,以便在列表开头插入时在视图中保留相同的项目。它还会检查视图是否位于列表顶部,并且在这种情况下不会滚动。
QScrollBar *pVerticalScrollBar = m_pUi->listView->verticalScrollBar();
bool bScrolledToTop = pVerticalScrollBar->value() == pVerticalScrollBar->minimum();
int iRowIndex = m_pUi->listView->indexAt(QPoint(8, 8)).row();
int iRowCount = m_pInfoListModel->rowCount();
/*
insert text into m_pInfoListModel here
*/
// move scroll bar to keep current items in view (if not scrolled to the top)
if (bScrolledToTop == false)
{
iRowCount = m_pInfoListModel->rowCount() - iRowCount;
m_pUi->listView->scrollTo(m_pInfoListModel->index(iRowIndex + iRowCount, 0), QAbstractItemView::PositionAtTop);
}
如果我在列表的顶部,这会给我一个滚动的项目列表,但是当我不想查看下方的项目时,视图保持固定。
答案 1 :(得分:0)
我会做以下事情:
找到我想要保持可见的列表视图项,而不是使用
获取其坐标QRect QAbstractItemView::visualRect(const QModelIndex &index)
与项目的坐标相比,我会调用QScrollArea::ensureVisible(int, int, int, int)
函数,以便在将每个新项目添加到列表后保持项目可见。
答案 2 :(得分:0)
我想您可以将setAutoScroll(True)
赋予QListView
实例。