QSqlTableModel первичный ключ для строки

у меня есть QSqlTableModel и я хочу вставить и обновить записи в нем с помощью специальной формы в дочернем окне. Это выбор дизайна, чтобы не допустить «встроенного редактирования», которое я специально отключил.

Когда пользователь выбирает запись (которая может быть отсортирована и отфильтрована через QSortFilterProxyModel и представлен через QTableView), у него есть три варианта (представлены кнопками): удалить, отредактировать и добавить.

Моя проблема с редактированием:

  1. Родительский виджет испускает сигнал с заданной записью и выполняет модель дочернего представления
  2. Дочерний виджет готовит форму, основанную на записи, ожидает ввода данных пользователем, проверяет ее, создает запись и отправляет ее обратно в родительский виджет.
  3. Родитель-виджет берет запись и помещает ее в базу данных.

И вот тут-то и проблема! Достаточно легко получить нужную запись по строке, например:

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

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]