Qt中如何通过代码跳转到选中行?(基于QTreeView和QSortFilterProxyModel)
解决QTreeView选中行后自动跳转的问题
要实现选中指定行后自动滚动到该行,只需在选中操作后调用QTreeView的scrollTo()方法即可,该方法能将目标索引对应的行滚动到视图的可见区域内。
修改后的代码示例
// 此处确定之前保存的索引(_lastAddObjectIndex 为 QModelIndex 类型) QModelIndex next_index = _proxyModel->index(_lastAddObjectIndex.row(), 0); // 先校验索引有效性,避免无效操作 if (next_index.isValid()) { // 选中目标行 view->selectionModel()->select(next_index, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows | QItemSelectionModel::SelectCurrent); // 自动滚动到该行,确保行处于视图可见区域 view->scrollTo(next_index, QTreeView::EnsureVisible); }
关键参数说明
scrollTo()的第二个参数可以控制滚动后的对齐方式,常用选项有:
QTreeView::EnsureVisible:确保目标行完全处于视图可见区域(默认值)QTreeView::PositionAtTop:将目标行滚动到视图顶部QTreeView::PositionAtBottom:将目标行滚动到视图底部QTreeView::PositionAtCenter:将目标行滚动到视图中央
根据实际需求选择合适的对齐方式即可。另外,必须先判断next_index是否有效——经过QSortFilterProxyModel过滤后,原模型的索引可能在代理模型中不存在,无效索引会导致scrollTo()不生效。
内容的提问来源于stack exchange,提问作者Vadim Kiselev
相关产品推荐
相关产品推荐

