在我的 Qt 6.6.0 应用程序中,我设置了一个
QSqlTableModel
和一个 QTableView
并启用了排序:
QSqlTableModel *model;
model = new QSqlTableModel(this, db);
model->setTable("table");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->sort(0, Qt::AscendingOrder);
model->select();
ui->tableDb->setModel(model); // QTableView
我是这样添加一条记录的:
QSqlRecord record = model->record();
record.setValue("col1", value1);
// ...
for (int i = 0; i < record.count(); i++) record.setGenerated(i, true);
bool ret = true;
ret &= _model->insertRecord(-1, record);
ret &= _model->submitAll();
if (!ret) return false;
ui->tableDb->selectRow(???);
我想选择最后插入的记录的行。 由于我启用了排序,所以我不知道记录放在
QTableView
中的什么位置。
如何从模型索引中检索其“视觉”位置?
查看
QTableView
文档我发现没有任何相关内容。
有一个 scrollTo()
功能,但它只是确保记录可见,而不是被选中。
我正在寻找类似 QTableView::selectRow(const QModelIndex &index)
功能的东西...
我必须使用
QSortFilterProxyModel
:
QSqlTableModel *model;
QSortFilterProxyModel *proxyModel;
model = new QSqlTableModel(this, db);
model->setTable("table");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(model);
proxyModel->sort(0);
ui->tableDb->setModel(proxyModel);
// ...
QModelIndex index = proxyModel->mapFromSource(model->index(model->rowCount() - 1, 0));
ui->tableDb->selectionModel()->setCurrentIndex(index, QItemSelectionModel::SelectCurrent | QItemSelectionModel::Rows);
通过这种方式,我可以从
QModelIndex
的索引中检索 QTableView
的正确 QSqlTableModel
。