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