【发布时间】:2011-02-22 11:31:25
【问题描述】:
我创建了一个 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;
}
问题是自动提交不起作用。如果我向 QtableWidget 添加行(使用相同的 addRow 方法),或者如果我修改/删除现有行(带有测试数据的行),则不会发生任何事情。
或者更好的是 gui 反映了更改,但重新运行应用程序我得到了与以前相同的测试日期。
有什么想法吗?有没有办法测试数据库发生了什么?如果它是一个普通的查询 q,我会做一个 q.lastError()。
谢谢
【问题讨论】: