从模型索引中选择 QTableView 行

问题描述 投票:0回答:1

在我的 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)
功能的东西...

qt qtableview qsqltablemodel
1个回答
0
投票

我必须使用

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

© www.soinside.com 2019 - 2024. All rights reserved.