我创建了一个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();
这是addRow()方法(在QTableWidget中创建行并将它们映射到模型):
int Widget::addRow(){
int rowsNum = ui->moneyTableWidget->rowCount();
ui->moneyTableWidget->insertRow(rowsNum);
QLineEdit *newQLineEdit = new QLineEdit();
QLineEdit *newItemLabel = new QLineEdit();
QDoubleValidator *doubleValidator = new QDoubleValidator(0.0, 5.0, 2, this);
newQLineEdit->setValidator(doubleValidator);
QObject::connect(newQLineEdit, SIGNAL(textChanged(const QString &)),
this, SLOT(updateTotal()));
ui->moneyTableWidget->setCellWidget(rowsNum, 0, newItemLabel);
ui->moneyTableWidget->setCellWidget(rowsNum, 1, newQLineEdit);
dataMapper->addMapping(newQLineEdit,databaseManager->getTableModel()->fieldIndex("price"), "text");
dataMapper->addMapping(newItemLabel,databaseManager->getTableModel()->fieldIndex("item"), "text");
return rowsNum;
}
问题是autosubmit不起作用。如果我向QtableWidget添加行(使用相同的addRow方法),或者如果我修改/删除现有行(具有测试数据的行),则不会发生任何事情。
或者更好的是gui反映了这些变化,但是重新运行应用程序我的测试日期与之前相同。
有什么想法吗?有没有办法测试数据库发生了什么?如果它是一个普通的查询q我会做一个q.lastError()。
感谢
答案 0 :(得分:2)
当你为QDataWidgetMapper设置提交策略时,它定义了数据从小部件转移到模型的相应字段的方式。只要小部件失去焦点,AutoSubmit就会将数据传输到模型。如果要为模型的dataChanged信号定义处理程序,您应该能够跟踪模型的更改。
现在,根据您的描述,当您重新启动应用时,您似乎期望模型中存在新行。为了做到这一点,数据模型应该通过手动(QSqlTableModel::submitAll)调用提交更改以及在字段或行更改时自动提交。要为您的模型设置编辑策略,请使用QSqlTableModel::setEditStrategy之一,其中包含一个可能的值:
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.
希望这有帮助,尊重