如何将QTableView滚动到删除元素/删除元素之前的位置?

时间:2015-11-10 15:02:50

标签: c++ qt qtableview qmodelindex

我有一个简单的表格,我在其中实现了remove_row方法:

QModelIndexList list = this->docTable->selectionModel()->selectedRows();
if(!list.isEmpty())
{
    this->docTable->model()->removeRow(list.at(0).row());
    this->model->select();
}

其中this->docTableQTableView而我的模型是QSqlRelationalTableModel

this->docTable = new QTableView(this);
this->model = new QSqlRelationalTableModel(this, db);
this->model->setTable("name");
this->model->select();
this->docTable->setModel(this->model);

我想要做的是将QTableView滚动到所选和已删除元素之后/之前的位置。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

在实际执行此操作之前,您可以scrollTo要删除的项目。之后删除行时,视图仍应位于已删除行的位置。在您的示例中

this->docTable->scrollTo(list.at(0));
this->docTable->model()->removeRow(list.at(0).row());
this->model->select();

否则,您可以计算删除行之前/之后的行的QModelIndex(如果存在)。由于已移除行的位置为list.at(0).row(),因此之前的行为list.at(0).row() - 1(如果row() > 0),并且所选行之后的下一行再次位于list.at(0).row()除去。要检索该行的QModelIndex,请使用模型的index(newRow, 0, QModelIndex())