我有一个QSqlTableModel
,我希望在子窗口中使用特殊表单插入和更新记录。它是一种设计选择,不允许"内联编辑"我故意禁用。
当用户选择一个条目(可以通过QSortFilterProxyModel
进行排序和过滤并通过QTableView
呈现)时,他有三个选项(由按钮表示):删除,编辑和添加
我的问题在于编辑:
这就是问题所在!人们可以很容易地逐行获得正确的记录,如下:
void Parent::on_button_edit_record_clicked()
{
// Table could be sorted/filtered!
row = proxyModel->mapToSource(ui->tableView->currentIndex()).row();
QSqlRecord r = model->record(row);
emit editRecordSignal(record);
child->exec();
}
void Parent::editRecord(const QSqlRecord &record)
{
model->setRecord(row, record);
}
如您所见,我手动保存要更新的记录行。我不认为这是处理这个问题的好方法。实际上对我来说似乎相当讨厌。
我错过的是将主键转换为行的简单方法,反之亦然。像:
void Parent::editRecord(const QSqlRecord &record)
{
model->setRecord(model->primaryKeyToRow(record->value("id")), record);
}
有没有办法轻松做到这一点(无需扩展QSqlTableModel
),所以我错过了什么或者我是否真的需要手动保存行来实现我想要的?