我有一个简单的表格,我在其中实现了remove_row
方法:
QModelIndexList list = this->docTable->selectionModel()->selectedRows();
if(!list.isEmpty())
{
this->docTable->model()->removeRow(list.at(0).row());
this->model->select();
}
其中this->docTable
是QTableView
而我的模型是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
滚动到所选和已删除元素之后/之前的位置。我怎么能做到这一点?
答案 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())
。