#include "mainwindow.h" #include "ui_mainwindow.h" #include "initdb.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); if (!QSqlDatabase::drivers().contains("QSQLITE")) QMessageBox::critical(this, "Unable to load database", "This program needs the SQLITE driver"); // initialize the database QSqlError err = initDb(); if (err.type() != QSqlError::NoError) { showError(err); return; } // Version with combobox model = new QSqlRelationalTableModel(this); model->setTable("cars"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); drivers_id = model->fieldIndex("drivers_id"); model->setRelation(drivers_id, QSqlRelation("drivers", "id", "lastname")); model->select(); ui->cb_driver->setModel(model->relationModel(drivers_id)); ui->cb_driver->setModelColumn(model->relationModel(drivers_id)->fieldIndex("lastname")); mapper = new QDataWidgetMapper(this); mapper->setModel(model); mapper->addMapping(ui->le_name, model->fieldIndex("name")); mapper->addMapping(ui->cb_driver, drivers_id); // End version with combobox /* // Version with line edit field model = new QSqlTableModel(this); model->setTable("cars"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); drivers_id = model->fieldIndex("drivers_id"); model->select(); mapper = new QDataWidgetMapper(this); mapper->setModel(model); mapper->addMapping(ui->le_name, model->fieldIndex("name")); mapper->addMapping(ui->le_driver_id, model->fieldIndex("drivers_id")); // End of Version with line edit field */ mapper->toFirst(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::showError(const QSqlError &err) { QMessageBox::critical(this, "Unable to initialize Database", "Error initializing database: " + err.text()); } void MainWindow::on_pb_previous_car_clicked() { mapper->submit(); mapper->toPrevious(); } void MainWindow::on_pb_next_car_clicked() { mapper->submit(); mapper->toNext(); } void MainWindow::on_pb_add_car_clicked() { model->database().transaction(); if (model->insertRow(model->rowCount())) { mapper->toLast(); } else { QMessageBox::warning(this, tr("Add Table"), tr("The database reported an error: %1") .arg(model->lastError().text())); } } void MainWindow::on_pb_undo_clicked() { int current; int rowcount; current = mapper->currentIndex(); rowcount = model->rowCount(); if(rowcount == current + 1) { current--; } model->revertAll(); mapper->setCurrentIndex(current); } void MainWindow::on_pb_save_clicked() { int current; current = mapper->currentIndex(); model->database().transaction(); if (model->submitAll()) { model->database().commit(); mapper->setCurrentIndex(current); } else { model->database().rollback(); QMessageBox::warning(this, tr("Cached Table"), tr("The database reported an error: %1") .arg(model->lastError().text())); } }