PDA

View Full Version : TableView and QDataWidgetMapper



kramed
16th June 2008, 21:03
Hi there,

I seem to be overlooking something linking my TableView data to some other widgets on another form. Everything appears correct, I have followed all the examples I could find but I think I am overlooking something simple and was hoping for some help.

I want my application to be able to edit the TableView data via the form I have added. The problem I am running into right now is the form is not being mapped properly to the data. I have included a screenshot.

http://www.markstahler.ca/images/temp/mapper.png

Am I using the right signal to connect the two? Thanks in advance!


createConnection(); //Sqlite DB Connection is made here

// Create and sort model for Table View
model = new QSqlRelationalTableModel(ui.tableView);
model->setTable("course");
model->setSort(model->fieldIndex("discipline"), Qt::AscendingOrder);

model->setHeaderData(model->fieldIndex("discipline"), Qt::Horizontal, tr("Discipline"));
model->setHeaderData(model->fieldIndex("course"), Qt::Horizontal, tr("Course"));
model->setHeaderData(model->fieldIndex("grade"), Qt::Horizontal, tr("Grade"));
model->setHeaderData(model->fieldIndex("year"), Qt::Horizontal, tr("Year"));
model->setHeaderData(model->fieldIndex("credits"), Qt::Horizontal, tr("Credits"));
model->setHeaderData(model->fieldIndex("semester"), Qt::Horizontal, tr("Semester"));

model->select();

// Link table view on form to sql table in sqlite db
ui.tableView->setModel(model);
ui.tableView->setColumnHidden(model->fieldIndex("id"), true);
ui.tableView->resizeColumnsToContents();


void MainWindow::createSignals()
{
connect(ui.tableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(editEntry(QModelIndex)));
}

void MainWindow::editEntry(QModelIndex loc)
{
QSqlRecord record = model->record(ui.tableView->currentIndex().row());
// Create Form to Add/Edit Grades
EntryForm *entryform = new EntryForm(this);

// Map widgets to model
mapper = new QDataWidgetMapper(this);
mapper->setModel(model);
mapper->addMapping(entryform->ui.CourseComboBox, model->fieldIndex("discipline"));
mapper->addMapping(entryform->ui.CourseSpinBox, model->fieldIndex("course"));
mapper->addMapping(entryform->ui.YearLineEdit, model->fieldIndex("year"));
mapper->addMapping(entryform->ui.CreditSpinBox, model->fieldIndex("credits"));
mapper->addMapping(entryform->ui.SemesterLineEdit, model->fieldIndex("semester"));

// Draw form
entryform->exec();
mapper->setCurrentModelIndex(loc);
mapper->setCurrentIndex(0);

}

kramed
17th June 2008, 05:41
I think I fixed it. It is late and I will have another look tomorrow.


void MainWindow::editEntry(QModelIndex loc)
{
int selection = ui.tableView->currentIndex().row();
// Create Form to Add/Edit Grades
EntryForm *entryform = new EntryForm(this);

// Map widgets to model
mapper = new QDataWidgetMapper(this);
mapper->setModel(model);
mapper->addMapping(entryform->ui.CourseComboBox, model->fieldIndex("discipline"));
mapper->addMapping(entryform->ui.CourseSpinBox, model->fieldIndex("course"));
mapper->addMapping(entryform->ui.YearLineEdit, model->fieldIndex("year"));
mapper->addMapping(entryform->ui.CreditSpinBox, model->fieldIndex("credits"));
mapper->addMapping(entryform->ui.SemesterLineEdit, model->fieldIndex("semester"));

mapper->setCurrentModelIndex(loc);
mapper->setCurrentIndex(selection);

entryform->exec();
}