2

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

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

this->docTablea在哪里QTableView,我的模型是 a 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到选定和删除元素之后/之前的位置。我怎样才能做到这一点?

4

1 回答 1

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(if ) 并且在删除所选行之后,row() > 0下一行再次是 at 。list.at(0).row()检索模型的QModelIndex该行使用index(newRow, 0, QModelIndex())

于 2015-11-10T16:05:34.430 回答