C++ QDataWidgetMapper自动提交不';行不通

C++ QDataWidgetMapper自动提交不';行不通,c++,sqlite,qt4,symbian,C++,Sqlite,Qt4,Symbian,我创建了一个sqldatabase,并用一些测试数据填充它。我使用的是QDataWidgetMapper,我认为我连接正确,因为我可以用以下代码读取测试记录: databaseManager = new DatabaseManager(); dataMapper = new QDataWidgetMapper(); dataMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit); dataMapper-&

我创建了一个sqldatabase,并用一些测试数据填充它。我使用的是QDataWidgetMapper,我认为我连接正确,因为我可以用以下代码读取测试记录:

    databaseManager = new DatabaseManager();
    dataMapper = new QDataWidgetMapper();
    dataMapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
    dataMapper->setModel(databaseManager->getTableModel());

    // aggiungo una riga nella tabella ui per ogni riga nel database
    for(int i=0; i<databaseManager->getTableModel()->rowCount(); i++){
        this->addRow(); 
    }
   dataMapper->toFirst();
问题是自动提交不起作用。如果我向QtableWidget添加行(使用相同的addRow方法),或者如果我修改/删除现有行(包含测试数据的行),则不会发生任何事情

或者更好的是,gui反映了更改,但是重新运行应用程序,我得到了与以前相同的测试日期

有什么想法吗?有没有办法测试数据库发生了什么?如果它是一个普通的查询,我会执行一个q.lastError()


谢谢

当您为QDataWidgetMapper设置提交策略时,它定义了将数据从小部件传输到模型相应字段的方式。当小部件失去焦点时,AutoSubmit会将数据传输到模型。如果要定义模型信号的处理程序,您应该能够跟踪模型的更改

现在从您的描述来看,当您重新启动应用程序时,您希望模型中出现一个新行。为了做到这一点,数据模型应该通过手动()调用或自动对字段或行进行更改来提交更改。要使用一个可能的值设置模型使用的编辑策略,请执行以下操作:

QSqlTableModel::OnFieldChange - All changes to the model will be applied immediately to the database.
QSqlTableModel::OnRowChange - Changes to a row will be applied when the user selects a different row.
QSqlTableModel::OnManualSubmit - All changes will be cached in the model until either submitAll() or revertAll() is called.

希望这能有所帮助,因为它已经开始工作了。现在,当我更新小部件中的一行时,将对模型中的所有行进行更改。。。但我认为这是我代码中的一个错误:-)。再次感谢!(我认为qt没有很好的文档记录)
QSqlTableModel::OnFieldChange - All changes to the model will be applied immediately to the database.
QSqlTableModel::OnRowChange - Changes to a row will be applied when the user selects a different row.
QSqlTableModel::OnManualSubmit - All changes will be cached in the model until either submitAll() or revertAll() is called.