【发布时间】:2018-06-22 23:47:02
【问题描述】:
我使用QTableView 和自定义模型,然后我想滚动到特定项目
模型更新。
我创建了两个按钮“更新模型”和“滚动到”:
btn->setText("Update model");
QObject::connect(btn, &QPushButton::clicked, [&tbl_model, view] {
tbl_model.update();
auto idx = tbl_model.index(49, 0);
qDebug() << "idx: " << idx;
view->scrollTo(idx, QAbstractItemView::PositionAtCenter);
});
btn->setText("scroll to");
QObject::connect(btn, &QPushButton::clicked, [view, &tbl_model] {
auto idx = tbl_model.index(49, 0);
qDebug() << "idx: " << idx;
view->scrollTo(idx, QAbstractItemView::PositionAtCenter);
});
更新方法代码:
void update() {
beginResetModel();
auto new_size = data_.size() == 100 ? 50 : 100;
data_.clear();
for (int i = 0; i < new_size; ++i) {
data_.append(i + 1);
}
endResetModel();
}
如果我按“更新模型”并且我的模型大小从 50 扩展到 100, 然后我在窗口底部看到带有 row==49 的项目, 然后如果我按“滚动到”按钮,我会看到它的中心。
那么在模型完全更新后我应该如何使用scrollTo?
当然我可以加processEvents或者使用QTimer::singleShot,
但它看起来像黑客,可能有一些事件或信号
视图准备好滚动了吗?
【问题讨论】: