PDA

View Full Version : How to use QDataWidgetMapper to manage data is a QSqlTableModel



graciano
1st March 2014, 11:13
Hello!

Hi have this basic ui to manage data is a MySQL table:
10091
The model/view approach works fine.
I'm trying now a "form" approach, using QDataWidgetMapper with the same model.
The model:


QSqlTableModel *model = new QSqlTableModel(this, QSqlDatabase::database("connection1"));
model->setTable("hobby");
model->setEditStrategy(QSqlTableModel::OnFieldChange);
model->setHeaderData(0, Qt::Horizontal, "ID");
model->setHeaderData(1, Qt::Horizontal, "Nome do passatempo");
model->select();
return model;


The QDataWidgetMapper:


void hobbyDialog::setupWidgetMapper()
{
mapper = new QDataWidgetMapper(this);
mapper->setModel(model);
mapper->addMapping(ui->spinBoxIdHobby, 0);
mapper->addMapping(ui->lineEditNomeHobby, 1);
mapper->toFirst();
...
}


Using the tableView, in order no add new record i used:


void hobbyDialog::on_inserirUmRegisto_clicked()
{
// Inserir um registo
view->setFocus();
int row = model->rowCount();
model->insertRows(row,1);
QModelIndex index = model->index(row, model->fieldIndex("idHobby"));
view->setCurrentIndex(index);
view->edit(index);
}


Now, using the form/QDataWidgetMapper, how do i manage the add new record?

anda_skoa
1st March 2014, 13:44
You code that adds a row only uses the model to do so, right?
So the same code should still add a row to the model.

Cheers,
_

graciano
1st March 2014, 16:09
My code uses the view:


QTableView* hobbyDialog::setupView()
{
view = ui->tableView;
view->setModel(model);
view->setSelectionMode(QAbstractItemView::SingleSelectio n);
//...
return view;
}


I tried this and it seems to work!


int row = model->rowCount();
model->insertRows(row,1);
mapper->setCurrentIndex(row);

I confess i was surprised ... in my mind this was supposed to be more complex:o