QTableView当前索引被删除时,如何才能避免滚动到底部
时间: 2023-12-13 14:03:38 浏览: 117
当QTableView中的当前索引被删除时,如果希望避免滚动到底部,可以通过以下方法实现:
1. 获取当前QTableView的滚动条位置。
2. 删除当前索引。
3. 设置QTableView的滚动条位置。
下面是一个示例代码:
```
QModelIndex currentIndex = ui->tableView->currentIndex(); // 获取当前索引
int scrollBarPosition = ui->tableView->verticalScrollBar()->value(); // 获取滚动条位置
model->removeRow(currentIndex.row()); // 删除当前索引所在的行
ui->tableView->verticalScrollBar()->setValue(scrollBarPosition); // 设置滚动条位置
```
这样做可以保持QTableView的滚动位置不变,并且在删除当前索引后继续保持当前视图状态。
相关问题
QTableView当前索引被删除时,怎么不滑动
可以使用`QTableView::scrollTo()`函数将视图滚动到先前的索引位置。在当前索引被删除后,你可以使用`QTableView::currentIndex()`获取新的当前索引,然后使用`scrollTo()`函数将视图滚动到该位置。下面是一个示例代码:
```cpp
QModelIndex current = tableView->currentIndex();
model->removeRow(current.row());
tableView->scrollTo(current);
```
在这个示例中,`tableView`是一个`QTableView`对象,`model`是该表视图所使用的模型。当当前索引被删除后,首先获取新的当前索引,然后使用`scrollTo()`函数将视图滚动到该位置。这样就可以保持视图不会自动滑动到表格的顶部或底部。
QTableView滑块滚动行向下移动
要在 QTableView 中使用滚动条滑块向下滚动行,您可以结合 QScrollBar 的 valueChanged 信号和 QTableView 的 scrollTo() 函数来实现。
以下是一个示例代码片段,展示如何使用滑块向下滚动行:
```cpp
// 假设 tableView 是您的 QTableView 对象
QScrollBar* verticalScrollBar = tableView->verticalScrollBar();
QObject::connect(verticalScrollBar, &QScrollBar::valueChanged, [=](int value) {
int previousValue = verticalScrollBar->property("previousValue").toInt();
if (value > previousValue) {
// 向下滚动
int currentRow = tableView->indexAt(QPoint(0, tableView->height())).row();
tableView->scrollTo(tableView->model()->index(currentRow, 0));
}
// 更新 previousValue
verticalScrollBar->setProperty("previousValue", value);
});
// 设置初始的 previousValue
verticalScrollBar->setProperty("previousValue", verticalScrollBar->value());
```
这段代码首先通过连接滚动条的 valueChanged 信号,获取当前滑块值和上一次的滑块值。然后,通过比较当前值和上一次值的大小,确定滑块的移动方向。如果滑块向下移动,将获取可视区域底部的行索引,并使用 scrollTo() 函数将其滚动到可视区域。
请根据您的具体需求将代码片段集成到您的应用程序中。希望这可以帮助到您!如果您还有其他问题,请随时提问。
阅读全文
相关推荐
















