У меня есть простая таблица, где я реализовал 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
на позицию после / до выбранного и удаленного элемента. Как я могу сделать это?
Вы могли бы 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())
вашей модели.
Других решений пока нет …