Я создал базу данных sqld и заполнил ее некоторыми тестовыми данными. Я использую 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) или если я изменяю / удаляю существующие строки (с тестовыми данными), ничего не происходит.
Или лучше графический интерфейс отражает изменения, но при повторном запуске приложения у меня та же дата тестирования, что и раньше.
Есть идеи? Есть ли способ проверить, что происходит с базой данных? Если бы это был обычный запрос q, я бы сделал q.lastError ().
спасибо