滚动QListView以在列表开始插入时保持项目在视图中
Scrolling QListView to keep items in view while inserting at start of list
我有一个QListView模型,我正在插入数据。我在列表的开头插入数据,这导致视图中的所有项目向下滚动。
自动滚动视图以保持视图固定的最佳方法是什么(即视图应该随着新项目插入模型中的可见项目一起移动)?
这似乎行得通。问题不在于滚动到特定的索引,而在于首先找到正确的索引。
下面的代码滚动视图,以便在列表开始插入时保持视图中相同的项。它还检查视图是否在列表的顶部,并且在这种情况下不滚动。
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);
}
这给了我一个项目的列表,滚动如果我在列表的顶部,但当我不想看项目下的视图保持固定
我猜你可以把setAutoScroll(True)
给QListView
实例
我会这样做:
找到我想要保持可见的列表视图项,然后使用
获取其坐标QRect QAbstractItemView::visualRect(const QModelIndex &index)
然后与项目的坐标,我将调用QScrollArea::ensureVisible(int, int, int, int)
函数,以保持项目可见后,将每个新项目添加到列表。
相关文章:
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何维护资源管理器项目视图中当前可见的项目列表
- Visual Studio 2015资源视图和资源编译器使用不同的方法在项目目录中查找图标文件.如何修复
- 如何确定网格视图中单击的项目
- 过滤期间,在树视图中扩展特定项目
- LVM_GETNEXTITEM在列表视图中找不到项目
- 如何:在C++的导航视图中选择项目
- 资源管理器在 TILE 视图模式下不显示 shell 命名空间扩展的项目详细信息
- 自定义图形列表视图项目不更改文本颜色
- Qt:模型/视图-定义项目持有日期的格式
- 如何在列表视图中显示每个项目的所有QComboBoxes
- 如何在Qt小工具项目中更新图形视图(Qt Creator)
- 在GUI中创建非常大的树状视图(超过1M个项目)
- 在不同的视图中上下移动QListWidget中的项目
- QListView:当从顶部删除项目时,如何自动滚动视图并保持视图中正确项目的当前选择
- 如何使用TVS_checkboxes样式删除特定树状视图项目上的复选框
- 列表视图-资源管理器如何在小图标视图中获得相同大小的所有项目
- c++ Win32 -跟踪列表视图项目的私人聊天
- 滚动QListView以在列表开始插入时保持项目在视图中
- 哪个函数可以用来在Qt的树视图中选择一个项目