行的QSqlTableModel主键

时间:2014-10-12 14:38:25

标签: c++ qt qsqltablemodel

我有一个QSqlTableModel,我希望在子窗口中使用特殊表单插入和更新记录。它是一种设计选择,不允许"内联编辑"我故意禁用。

当用户选择一个条目(可以通过QSortFilterProxyModel进行排序和过滤并通过QTableView呈现)时,他有三个选项(由按钮表示):删除,编辑和添加

我的问题在于编辑:

  1. 父窗口小部件使用给定记录发出信号并执行模型子视图
  2. 子窗口小部件根据记录准备表单,等待用户输入,验证它,创建记录并将其发送回父窗口小部件。
  3. 父窗口小部件获取记录并将其放入数据库。
  4. 这就是问题所在!人们可以很容易地逐行获得正确的记录,如下:

    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),所以我错过了什么或者我是否真的需要手动保存行来实现我想要的?

0 个答案:

没有答案