у меня есть 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
), так что я что-то пропустил или мне действительно нужно сохранить строку вручную, чтобы добиться того, чего я хочу?
Задача ещё не решена.