From aefe4ba9cd81296c865606a2d9341377c21c247a Mon Sep 17 00:00:00 2001 From: giomba Date: Fri, 16 Aug 2019 15:34:25 +0200 Subject: [PATCH 1/9] Minor fixes to make it run on Linux --- nicolodi/EditWindow.cpp | 12 +++++------- nicolodi/EditWindow.h | 2 +- nicolodi/Pin.cpp | 2 +- nicolodi/db.cpp | 28 ++++++++++++++-------------- 4 files changed, 21 insertions(+), 23 deletions(-) diff --git a/nicolodi/EditWindow.cpp b/nicolodi/EditWindow.cpp index 83dc0ca..d88b829 100644 --- a/nicolodi/EditWindow.cpp +++ b/nicolodi/EditWindow.cpp @@ -1,10 +1,7 @@ #include "EditWindow.h" #include "ui_EditWindow.h" -EditWindow::EditWindow(int idSocio, QString pin, QWidget *parent) : - QMainWindow(parent), - ui(new Ui::EditWindow) -{ +EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(new Ui::EditWindow) { ui->setupUi(this); if (!db.open()) { @@ -21,10 +18,10 @@ EditWindow::EditWindow(int idSocio, QString pin, QWidget *parent) : model->setEditStrategy(QSqlTableModel::OnManualSubmit); // Indici dei campi in join - //professioneIdx = model->fieldIndex("professione"); - //fonteIdx = model->fieldIndex("fonte"); + professioneIdx = model->fieldIndex("professione"); + fonteIdx = model->fieldIndex("fonte"); - // La strategia di join da usare per le rleazioni e' LeftJoin + // La strategia di join da usare per le relazioni รจ LeftJoin model->setJoinMode(QSqlRelationalTableModel::LeftJoin); // Imposta le relazioni @@ -73,6 +70,7 @@ void EditWindow::showError(const QSqlError &err) EditWindow::~EditWindow() { + delete model; delete ui; } diff --git a/nicolodi/EditWindow.h b/nicolodi/EditWindow.h index 7d26999..b6fd778 100644 --- a/nicolodi/EditWindow.h +++ b/nicolodi/EditWindow.h @@ -17,7 +17,7 @@ class EditWindow : public QMainWindow Q_OBJECT public: - explicit EditWindow(int idSocio, QString pin, QWidget *parent = nullptr); + explicit EditWindow(int idSocio, QWidget* parent = nullptr); ~EditWindow(); bool doNotShow = false; diff --git a/nicolodi/Pin.cpp b/nicolodi/Pin.cpp index 373e6bf..d73d1c1 100644 --- a/nicolodi/Pin.cpp +++ b/nicolodi/Pin.cpp @@ -72,7 +72,7 @@ void Pin::on_pushButtonOk_clicked() // delle editwindow // Un socio e' valido se ha idSocio maggiore di zero if (idSocio > 0) { - EditWindow *ew = new EditWindow(idSocio, pin, this); + EditWindow *ew = new EditWindow(idSocio, this); ew->setAttribute(Qt::WA_DeleteOnClose); ew->setWindowModality(Qt::ApplicationModal); if (!ew->doNotShow) { diff --git a/nicolodi/db.cpp b/nicolodi/db.cpp index 47eafdf..399d1a9 100644 --- a/nicolodi/db.cpp +++ b/nicolodi/db.cpp @@ -10,10 +10,10 @@ void connectDatabase() { /* open database and attach query */ db = QSqlDatabase::addDatabase("QMYSQL"); /* QMYSQL <-- database driver */ - // db.setHostName(settings.value("hostname").toString()); - // db.setDatabaseName(settings.value("database").toString()); - // db.setUserName(settings.value("username").toString()); - // db.setPassword(settings.value("password").toString()); + db.setHostName(settings.value("hostname").toString()); + db.setDatabaseName(settings.value("database").toString()); + db.setUserName(settings.value("username").toString()); + db.setPassword(settings.value("password").toString()); // db.setHostName(settings.value("hostname","serverozzo.golem.linux.it").toString()); // db.setDatabaseName(settings.value("database","golem_gestionale").toString()); @@ -21,17 +21,17 @@ void connectDatabase() { // db.setUserName(settings.value("username").toString()); // db.setPassword(settings.value("password").toString()); - QString hostname = settings.value("hostname","localhost").toString(); - QString database = settings.value("database","golem_gestionale").toString(); - int port = settings.value("port", "3306").toInt(); - QString username = settings.value("username", "admin").toString(); - QString password = settings.value("password", "password").toString(); + // QString hostname = settings.value("hostname","localhost").toString(); + // QString database = settings.value("database","golem_gestionale").toString(); + // int port = settings.value("port", "3306").toInt(); + // QString username = settings.value("username", "admin").toString(); + // QString password = settings.value("password", "password").toString(); - db.setHostName(hostname); - db.setDatabaseName(database); - db.setPort(port); - db.setUserName(username); - db.setPassword(password); + // db.setHostName(hostname); + // db.setDatabaseName(database); + // db.setPort(port); + // db.setUserName(username); + // db.setPassword(password); // query = QSqlQuery(db); } From dc5387b63c76703f128213ddd81f975a910a53a6 Mon Sep 17 00:00:00 2001 From: giomba Date: Fri, 16 Aug 2019 15:50:00 +0200 Subject: [PATCH 2/9] Global unique database connection this looks like the way qt should work, and doing otherwise (creating and destroyng continuously the connection) gives a lot of warnings at runtime --- nicolodi/EditWindow.cpp | 1 - nicolodi/Pin.cpp | 9 ++------- nicolodi/main.cpp | 4 +++- 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/nicolodi/EditWindow.cpp b/nicolodi/EditWindow.cpp index d88b829..2b25cfe 100644 --- a/nicolodi/EditWindow.cpp +++ b/nicolodi/EditWindow.cpp @@ -5,7 +5,6 @@ EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(n ui->setupUi(this); if (!db.open()) { - // QMessageBox::critical(this, "Nicolodi", "Problemi con la connessione al db"); showError(db.lastError()); this->doNotShow = true; return; diff --git a/nicolodi/Pin.cpp b/nicolodi/Pin.cpp index d73d1c1..4bbaf9d 100644 --- a/nicolodi/Pin.cpp +++ b/nicolodi/Pin.cpp @@ -2,10 +2,7 @@ #include "ui_Pin.h" #include "EditWindow.h" -Pin::Pin(QWidget *parent) : - QDialog(parent), - ui(new Ui::Pin) -{ +Pin::Pin(QWidget *parent) : QDialog(parent), ui(new Ui::Pin) { ui->setupUi(this); // Imposta la dialog come non ingrandibile/riducibile @@ -30,8 +27,6 @@ void Pin::on_pushButtonOk_clicked() bool questionarioAbilitato; QString pin = ui->lineEditPin->text(); - connectDatabase(); - if (db.open()) { query = QSqlQuery(db); query.prepare("SELECT id, abilitaQuestionario FROM socio WHERE pin = :pin"); @@ -60,7 +55,7 @@ void Pin::on_pushButtonOk_clicked() // sono risorse preziose che si devono aprire, usare per il minor // tempo possibile e quindi chiudere query.clear(); - db.close(); + //db.close(); } else { QMessageBox::critical(this, "Nicolodi", "Impossibile connettersi al database, verificare impostazioni."); } diff --git a/nicolodi/main.cpp b/nicolodi/main.cpp index 623b8ff..a6b2e95 100644 --- a/nicolodi/main.cpp +++ b/nicolodi/main.cpp @@ -4,7 +4,9 @@ int main(int argc, char *argv[]) { QApplication a(argc, argv); - // MainWindow w; + + connectDatabase(); + Pin w; w.show(); From ac102857f9ef57e28696aeaecc413036d0485afd Mon Sep 17 00:00:00 2001 From: giomba Date: Fri, 16 Aug 2019 18:11:32 +0200 Subject: [PATCH 3/9] Removed redundant references to ui elements --- argento/EditWindow.cpp | 54 ++++++++++++++++-------------------------- argento/EditWindow.h | 11 --------- argento/MainWindow.cpp | 16 +++++-------- argento/MainWindow.h | 4 ---- 4 files changed, 27 insertions(+), 58 deletions(-) diff --git a/argento/EditWindow.cpp b/argento/EditWindow.cpp index 87d0c14..a1ba2d5 100644 --- a/argento/EditWindow.cpp +++ b/argento/EditWindow.cpp @@ -3,18 +3,6 @@ EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(new Ui::EditWindow) { ui->setupUi(this); - /* retrieve all elements of the GUI */ - lineID = this->findChild("lineID"); - lineNome = this->findChild("lineNome"); - lineCognome = this->findChild("lineCognome"); - lineComuneResidenza = this->findChild("lineComuneResidenza"); - lineEmail = this->findChild("lineEmail"); - dateDataNascita = this->findChild("dateDataNascita"); - dateDataCompilazione = this->findChild("dateDataCompilazione"); - comboProfessione = this->findChild("comboProfessione"); - comboFonte = this->findChild("comboFonte"); - checkAbilitaQuestionario = this->findChild("checkAbilitaQuestionario"); - /* connect query with common database */ query = QSqlQuery(db); @@ -22,13 +10,13 @@ EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(n query.prepare("SELECT id, professione FROM professione ORDER BY professione"); query.exec(); while (query.next()) { - comboProfessione->addItem(query.value(1).toString(), query.value(0).toInt()); + ui->comboProfessione->addItem(query.value(1).toString(), query.value(0).toInt()); } query.prepare("SELECT id, fonte FROM fonte ORDER BY fonte"); query.exec(); while (query.next()) { - comboFonte->addItem(query.value(1).toString(), query.value(0).toInt()); + ui->comboFonte->addItem(query.value(1).toString(), query.value(0).toInt()); } /* populate fields from database */ @@ -42,16 +30,16 @@ EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(n query.first(); /* show everything in the interface */ - lineID->setText(query.value( query.record().indexOf("id") ).toString()); - lineNome->setText(query.value( query.record().indexOf("nome") ).toString()); - lineCognome->setText(query.value( query.record().indexOf("cognome") ).toString()); - lineComuneResidenza->setText(query.value(query.record().indexOf("comuneResidenza")).toString()); - lineEmail->setText(query.value(query.record().indexOf("email")).toString()); - comboProfessione->setCurrentIndex(comboProfessione->findData(query.value(query.record().indexOf("professione")).toInt())); - comboFonte->setCurrentIndex(comboFonte->findData(query.value(query.record().indexOf("fonte")).toInt())); - dateDataNascita->setDate(QDate(1900, 1, 1)); dateDataNascita->setDate(query.value(query.record().indexOf("dataNascita")).toDate()); - dateDataCompilazione->setDate(QDate(1900, 1, 1)); dateDataCompilazione->setDate(query.value(query.record().indexOf("dataCompilazione")).toDate()); - checkAbilitaQuestionario->setChecked( query.value(query.record().indexOf("abilitaQuestionario")).toBool() ); + ui->lineID->setText(query.value( query.record().indexOf("id") ).toString()); + ui->lineNome->setText(query.value( query.record().indexOf("nome") ).toString()); + ui->lineCognome->setText(query.value( query.record().indexOf("cognome") ).toString()); + ui->lineComuneResidenza->setText(query.value(query.record().indexOf("comuneResidenza")).toString()); + ui->lineEmail->setText(query.value(query.record().indexOf("email")).toString()); + ui->comboProfessione->setCurrentIndex(ui->comboProfessione->findData(query.value(query.record().indexOf("professione")).toInt())); + ui->comboFonte->setCurrentIndex(ui->comboFonte->findData(query.value(query.record().indexOf("fonte")).toInt())); + ui->dateDataNascita->setDate(QDate(1900, 1, 1)); ui->dateDataNascita->setDate(query.value(query.record().indexOf("dataNascita")).toDate()); + ui->dateDataCompilazione->setDate(QDate(1900, 1, 1)); ui->dateDataCompilazione->setDate(query.value(query.record().indexOf("dataCompilazione")).toDate()); + ui->checkAbilitaQuestionario->setChecked( query.value(query.record().indexOf("abilitaQuestionario")).toBool() ); } void EditWindow::on_buttonSalva_clicked() { @@ -66,15 +54,15 @@ professione = NULLIF(:professione, 0), \ fonte = NULLIF(:fonte, 0), \ abilitaQuestionario = :abilitaQuestionario \ WHERE id = :id"); - query.bindValue(":id", lineID->text()); - query.bindValue(":nome", lineNome->text()); - query.bindValue(":cognome", lineCognome->text()); - query.bindValue(":comuneResidenza", lineComuneResidenza->text()); - query.bindValue(":email", lineEmail->text()); - query.bindValue(":dataNascita", (dateDataNascita->date()).toString("yyyy-MM-dd")); - query.bindValue(":professione", comboProfessione->currentData().toInt()); - query.bindValue(":fonte", comboFonte->currentData().toInt()); - query.bindValue(":abilitaQuestionario", checkAbilitaQuestionario->isChecked()); + query.bindValue(":id", ui->lineID->text()); + query.bindValue(":nome", ui->lineNome->text()); + query.bindValue(":cognome", ui->lineCognome->text()); + query.bindValue(":comuneResidenza", ui->lineComuneResidenza->text()); + query.bindValue(":email", ui->lineEmail->text()); + query.bindValue(":dataNascita", (ui->dateDataNascita->date()).toString("yyyy-MM-dd")); + query.bindValue(":professione", ui->comboProfessione->currentData().toInt()); + query.bindValue(":fonte", ui->comboFonte->currentData().toInt()); + query.bindValue(":abilitaQuestionario", ui->checkAbilitaQuestionario->isChecked()); if ( ! query.exec() ) { qDebug() << fullQuery(query); diff --git a/argento/EditWindow.h b/argento/EditWindow.h index 56f153b..85361de 100644 --- a/argento/EditWindow.h +++ b/argento/EditWindow.h @@ -29,17 +29,6 @@ private slots: void on_buttonAnnulla_clicked(); private: - QLineEdit* lineID = nullptr; - QLineEdit* lineNome = nullptr; - QLineEdit* lineCognome = nullptr; - QLineEdit* lineComuneResidenza = nullptr; - QLineEdit* lineEmail = nullptr; - QDateEdit* dateDataNascita = nullptr; - QDateEdit* dateDataCompilazione = nullptr; - QComboBox* comboProfessione = nullptr; - QComboBox* comboFonte = nullptr; - QCheckBox* checkAbilitaQuestionario = nullptr; - QSqlQuery query; Ui::EditWindow *ui; diff --git a/argento/MainWindow.cpp b/argento/MainWindow.cpp index e0c3c37..7b67f1c 100644 --- a/argento/MainWindow.cpp +++ b/argento/MainWindow.cpp @@ -4,10 +4,6 @@ MainWindow* mw; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); - - lineCognome = this->findChild("lineCognome"); - lineNome = this->findChild("lineNome"); - tableSoci = this->findChild("tableSoci"); } void MainWindow::connectDatabase(void) { @@ -39,8 +35,8 @@ void MainWindow::on_buttonCerca_clicked() { if (!db.open()) connectDatabase(); query.prepare("SELECT id, nome, cognome FROM socio WHERE LOWER(nome) LIKE LOWER(:nome) AND LOWER(cognome) LIKE LOWER(:cognome)"); - query.bindValue( ":nome", QString("%%1%").arg(lineNome->text()) ); - query.bindValue( ":cognome", QString("%%1%").arg(lineCognome->text()) ); + query.bindValue( ":nome", QString("%%1%").arg(ui->lineNome->text()) ); + query.bindValue( ":cognome", QString("%%1%").arg(ui->lineCognome->text()) ); if (! query.exec()) { status(Ui::ERROR, fullQuery(query)); return; } if ( query.size() == 0) { status(Ui::INFO, "no results found"); return; } @@ -50,18 +46,18 @@ void MainWindow::on_buttonCerca_clicked() { status(Ui::INFO, QString("%1 results found").arg(query.size())); - tableSoci->setModel(sociModel); + ui->tableSoci->setModel(sociModel); /* the signal is automagically added by some obscure qt build system, provided the function is named in a standard way */ //QObject::connect(tableSoci, SIGNAL(clicked(const QModelIndex&)), this, SLOT(on_tableSoci_clicked(const QModelIndex&))); - tableSoci->show(); + ui->tableSoci->show(); } void MainWindow::on_buttonNuovo_clicked() { if (! db.open()) connectDatabase(); query.prepare("INSERT INTO socio (nome, cognome) VALUES (NULLIF(:nome, ''), NULLIF(:cognome, ''))"); - query.bindValue(":nome", lineNome->text()); - query.bindValue(":cognome", lineCognome->text()); + query.bindValue(":nome", ui->lineNome->text()); + query.bindValue(":cognome", ui->lineCognome->text()); if (! query.exec()) { status(Ui::ERROR, fullQuery(query)); return; } if (! query.lastInsertId().isValid()) { status(Ui::ERROR, fullQuery(query)); return; } diff --git a/argento/MainWindow.h b/argento/MainWindow.h index d146000..26bc583 100644 --- a/argento/MainWindow.h +++ b/argento/MainWindow.h @@ -33,10 +33,6 @@ private: SociModel* sociModel = nullptr; QSqlQuery query; - QLineEdit* lineNome = nullptr; - QLineEdit* lineCognome = nullptr; - QTableView* tableSoci = nullptr; - Ui::MainWindow *ui; void connectDatabase(void); From 28b2375e42fd5cff36557bb33daf30b6d03ef4df Mon Sep 17 00:00:00 2001 From: giomba Date: Fri, 16 Aug 2019 18:38:30 +0200 Subject: [PATCH 4/9] [argento] ui<->database properly connected using QtModel --- argento/EditWindow.cpp | 110 ++++++++++++++++++++--------------------- argento/EditWindow.h | 3 ++ 2 files changed, 56 insertions(+), 57 deletions(-) diff --git a/argento/EditWindow.cpp b/argento/EditWindow.cpp index a1ba2d5..cf562e3 100644 --- a/argento/EditWindow.cpp +++ b/argento/EditWindow.cpp @@ -3,75 +3,70 @@ EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(new Ui::EditWindow) { ui->setupUi(this); - /* connect query with common database */ + /* connect query with common global database */ query = QSqlQuery(db); - /* retrieve professione and fonte from database */ - query.prepare("SELECT id, professione FROM professione ORDER BY professione"); - query.exec(); - while (query.next()) { - ui->comboProfessione->addItem(query.value(1).toString(), query.value(0).toInt()); - } + model = new QSqlRelationalTableModel(this); + model->setTable("socio"); + model->setFilter(QString("socio.id = %1").arg(idSocio)); + model->setEditStrategy(QSqlTableModel::OnManualSubmit); - query.prepare("SELECT id, fonte FROM fonte ORDER BY fonte"); - query.exec(); - while (query.next()) { - ui->comboFonte->addItem(query.value(1).toString(), query.value(0).toInt()); - } + int professioneIdx = model->fieldIndex("professione"); + int fonteIdx = model->fieldIndex("fonte"); - /* populate fields from database */ - query.prepare("SELECT s.id, s.nome, s.cognome, \ - s.dataNascita, s.comuneResidenza, s.email, s.professione, s.fonte, s.abilitaQuestionario, \ - q.dataCompilazione \ - FROM socio AS s LEFT OUTER JOIN questionario AS q ON s.id = q.socio \ - WHERE s.id = :id"); - query.bindValue( ":id", idSocio ); - query.exec(); - query.first(); + model->setJoinMode(QSqlRelationalTableModel::LeftJoin); - /* show everything in the interface */ - ui->lineID->setText(query.value( query.record().indexOf("id") ).toString()); - ui->lineNome->setText(query.value( query.record().indexOf("nome") ).toString()); - ui->lineCognome->setText(query.value( query.record().indexOf("cognome") ).toString()); - ui->lineComuneResidenza->setText(query.value(query.record().indexOf("comuneResidenza")).toString()); - ui->lineEmail->setText(query.value(query.record().indexOf("email")).toString()); - ui->comboProfessione->setCurrentIndex(ui->comboProfessione->findData(query.value(query.record().indexOf("professione")).toInt())); - ui->comboFonte->setCurrentIndex(ui->comboFonte->findData(query.value(query.record().indexOf("fonte")).toInt())); - ui->dateDataNascita->setDate(QDate(1900, 1, 1)); ui->dateDataNascita->setDate(query.value(query.record().indexOf("dataNascita")).toDate()); - ui->dateDataCompilazione->setDate(QDate(1900, 1, 1)); ui->dateDataCompilazione->setDate(query.value(query.record().indexOf("dataCompilazione")).toDate()); - ui->checkAbilitaQuestionario->setChecked( query.value(query.record().indexOf("abilitaQuestionario")).toBool() ); -} + model->setRelation(professioneIdx, QSqlRelation("professione", "id", "professione")); + model->setRelation(fonteIdx, QSqlRelation("fonte", "id", "fonte")); -void EditWindow::on_buttonSalva_clicked() { - - query.prepare("UPDATE socio \ -SET nome = NULLIF(:nome, ''), \ -cognome = NULLIF(:cognome, ''), \ -dataNascita = NULLIF(:dataNascita, '1900-01-01'), \ -comuneResidenza = NULLIF(:comuneResidenza, ''), \ -email = NULLIF(:email, ''), \ -professione = NULLIF(:professione, 0), \ -fonte = NULLIF(:fonte, 0), \ -abilitaQuestionario = :abilitaQuestionario \ -WHERE id = :id"); - query.bindValue(":id", ui->lineID->text()); - query.bindValue(":nome", ui->lineNome->text()); - query.bindValue(":cognome", ui->lineCognome->text()); - query.bindValue(":comuneResidenza", ui->lineComuneResidenza->text()); - query.bindValue(":email", ui->lineEmail->text()); - query.bindValue(":dataNascita", (ui->dateDataNascita->date()).toString("yyyy-MM-dd")); - query.bindValue(":professione", ui->comboProfessione->currentData().toInt()); - query.bindValue(":fonte", ui->comboFonte->currentData().toInt()); - query.bindValue(":abilitaQuestionario", ui->checkAbilitaQuestionario->isChecked()); - - if ( ! query.exec() ) { + if (! model->select()) { qDebug() << fullQuery(query); qDebug() << db.lastError().text(); Ui::status(Ui::ERROR, "query error"); return; } - Ui::status(Ui::SUCCESS, "successfull update"); + QSqlTableModel* professioneModel = model->relationModel(professioneIdx); + ui->comboProfessione->setModel(professioneModel); + ui->comboProfessione->setModelColumn(professioneModel->fieldIndex("professione")); + + QSqlTableModel* fonteModel = model->relationModel(fonteIdx); + ui->comboFonte->setModel(fonteModel); + ui->comboFonte->setModelColumn(fonteModel->fieldIndex("fonte")); + + QDataWidgetMapper* mapper = new QDataWidgetMapper(this); + mapper->setModel(model); + mapper->setItemDelegate(new QSqlRelationalDelegate(this)); + mapper->addMapping(ui->lineID, model->fieldIndex("id")); + mapper->addMapping(ui->lineCognome, model->fieldIndex("cognome")); + mapper->addMapping(ui->lineNome, model->fieldIndex("nome")); + mapper->addMapping(ui->dateDataNascita, model->fieldIndex("dataNascita")); + mapper->addMapping(ui->lineComuneResidenza, model->fieldIndex("comuneResidenza")); + mapper->addMapping(ui->lineEmail, model->fieldIndex("email")); + mapper->addMapping(ui->comboProfessione, professioneIdx); + mapper->addMapping(ui->comboFonte, fonteIdx); + + mapper->toFirst(); + +} + +void EditWindow::on_buttonSalva_clicked() { + + if (model->isDirty()) { + model->database().transaction(); + + if (model->submitAll()) { + model->database().commit(); + Ui::status(Ui::SUCCESS, "successfull update"); + } else { + model->database().rollback(); + qDebug() << model->lastError(); + Ui::status(Ui::ERROR, "model transaction submit error"); + } + } else { + Ui::status(Ui::INFO, "nothing done"); + } + } void EditWindow::on_buttonAnnulla_clicked() { @@ -80,5 +75,6 @@ void EditWindow::on_buttonAnnulla_clicked() { EditWindow::~EditWindow() { + delete model; delete ui; } diff --git a/argento/EditWindow.h b/argento/EditWindow.h index 85361de..ba7de7d 100644 --- a/argento/EditWindow.h +++ b/argento/EditWindow.h @@ -4,6 +4,8 @@ #include #include #include +#include +#include #include @@ -30,6 +32,7 @@ private slots: private: QSqlQuery query; + QSqlRelationalTableModel* model = nullptr; Ui::EditWindow *ui; }; From e37455b8c0718e525b478bd86f1c36deaa90d56c Mon Sep 17 00:00:00 2001 From: giomba Date: Fri, 16 Aug 2019 18:39:04 +0200 Subject: [PATCH 5/9] [nicolodi] nullptr initialization of priv members --- nicolodi/EditWindow.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nicolodi/EditWindow.h b/nicolodi/EditWindow.h index b6fd778..a6e554e 100644 --- a/nicolodi/EditWindow.h +++ b/nicolodi/EditWindow.h @@ -29,7 +29,7 @@ private slots: private: Ui::EditWindow *ui; - QSqlRelationalTableModel *model; + QSqlRelationalTableModel *model = nullptr; bool doNotShow_; int professioneIdx; int fonteIdx; From 6fa30bd81d1e5b76661d805fe67eb50b3e2a5db8 Mon Sep 17 00:00:00 2001 From: giomba Date: Fri, 16 Aug 2019 18:44:57 +0200 Subject: [PATCH 6/9] [doc] Updated README.md --- README | 23 ----------------------- README.md | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 23 deletions(-) delete mode 100644 README create mode 100644 README.md diff --git a/README b/README deleted file mode 100644 index 785fa74..0000000 --- a/README +++ /dev/null @@ -1,23 +0,0 @@ - Argento -=============== -A management software for GOLEM - Gruppo Operativo Linux Empoli. - -== Components == -argento: - president's interface to run on Sala-Corsi - -nicolodi: - socio's interface to run on Limortouch - -== Dependencies == -On Debian/Ubuntu/Mint: - qt5-default - ... TODO ... - -== Build == - $ cd $REPOSITORY - $ mkdir build-component - $ cd build-component - $ qmake ../component - $ make -j$(nproc) - diff --git a/README.md b/README.md new file mode 100644 index 0000000..2569a52 --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# Gestionale da Paura +A management software for GOLEM - Gruppo Operativo Linux Empoli. + +## Components +* argento: president's interface to run on Sala-Corsi +* nicolodi: socio's interface to run on Limortouch + +## Dependencies +On Debian/Ubuntu/Mint: + qt5-default + ... TODO ... + +# Build + $ cd $REPOSITORY + $ mkdir build-component + $ cd build-component + $ qmake ../component + $ make -j$(nproc) + From 82a9879f2809a0d536764d8b0a1b407febdbe311 Mon Sep 17 00:00:00 2001 From: giomba Date: Fri, 16 Aug 2019 19:23:43 +0200 Subject: [PATCH 7/9] [argento] OTP Pin management --- argento/EditWindow.cpp | 9 ++++-- argento/EditWindow.h | 1 + argento/EditWindow.ui | 68 +++++++++++++++++++++++++++++++++++------- 3 files changed, 66 insertions(+), 12 deletions(-) diff --git a/argento/EditWindow.cpp b/argento/EditWindow.cpp index cf562e3..095688f 100644 --- a/argento/EditWindow.cpp +++ b/argento/EditWindow.cpp @@ -34,7 +34,7 @@ EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(n ui->comboFonte->setModel(fonteModel); ui->comboFonte->setModelColumn(fonteModel->fieldIndex("fonte")); - QDataWidgetMapper* mapper = new QDataWidgetMapper(this); + mapper = new QDataWidgetMapper(this); mapper->setModel(model); mapper->setItemDelegate(new QSqlRelationalDelegate(this)); mapper->addMapping(ui->lineID, model->fieldIndex("id")); @@ -45,9 +45,10 @@ EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(n mapper->addMapping(ui->lineEmail, model->fieldIndex("email")); mapper->addMapping(ui->comboProfessione, professioneIdx); mapper->addMapping(ui->comboFonte, fonteIdx); + mapper->addMapping(ui->checkAbilitaQuestionario, model->fieldIndex("abilitaQuestionario")); + mapper->addMapping(ui->linePin, model->fieldIndex("pin")); mapper->toFirst(); - } void EditWindow::on_buttonSalva_clicked() { @@ -58,6 +59,9 @@ void EditWindow::on_buttonSalva_clicked() { if (model->submitAll()) { model->database().commit(); Ui::status(Ui::SUCCESS, "successfull update"); + /* update ui */ + model->select(); + mapper->toFirst(); } else { model->database().rollback(); qDebug() << model->lastError(); @@ -75,6 +79,7 @@ void EditWindow::on_buttonAnnulla_clicked() { EditWindow::~EditWindow() { + delete mapper; delete model; delete ui; } diff --git a/argento/EditWindow.h b/argento/EditWindow.h index ba7de7d..858eed7 100644 --- a/argento/EditWindow.h +++ b/argento/EditWindow.h @@ -33,6 +33,7 @@ private slots: private: QSqlQuery query; QSqlRelationalTableModel* model = nullptr; + QDataWidgetMapper* mapper = nullptr; Ui::EditWindow *ui; }; diff --git a/argento/EditWindow.ui b/argento/EditWindow.ui index a7de325..16fb54b 100644 --- a/argento/EditWindow.ui +++ b/argento/EditWindow.ui @@ -257,14 +257,14 @@ - 120 - 180 - 151 + 450 + 170 + 71 31 - Abilita compilazione + Abilita @@ -273,8 +273,8 @@ - 10 - 180 + 230 + 170 101 32 @@ -293,13 +293,13 @@ 10 - 160 - 201 - 21 + 170 + 80 + 31 - Data compilazione questionario + Questionario true @@ -318,6 +318,54 @@ Annulla + + + + 100 + 170 + 131 + 31 + + + + Ultima compilazione + + + true + + + + + false + + + + 370 + 170 + 71 + 32 + + + + true + + + + + + 340 + 170 + 31 + 31 + + + + OTP + + + true + + From 6f4f1d67ca884a6d2b3b679cd308105d90e8f19e Mon Sep 17 00:00:00 2001 From: giomba Date: Fri, 16 Aug 2019 19:25:32 +0200 Subject: [PATCH 8/9] [doc] minor README.md changes --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2569a52..6d07dba 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,8 @@ A management software for GOLEM - Gruppo Operativo Linux Empoli. ## Dependencies On Debian/Ubuntu/Mint: - qt5-default - ... TODO ... +* qt5-default +* TODO # Build $ cd $REPOSITORY From 69e2b8c6a1bd8f24828d6f20e483923e32cd1cf9 Mon Sep 17 00:00:00 2001 From: giomba Date: Fri, 16 Aug 2019 20:51:52 +0200 Subject: [PATCH 9/9] [argento] backport to Qt 5.9 LTS --- argento/MainWindow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/argento/MainWindow.cpp b/argento/MainWindow.cpp index 7b67f1c..8d381bf 100644 --- a/argento/MainWindow.cpp +++ b/argento/MainWindow.cpp @@ -70,7 +70,7 @@ void MainWindow::on_buttonNuovo_clicked() { void MainWindow::on_tableSoci_clicked(const QModelIndex& index) { if (index.isValid()) { /* extracts id socio from first column of table view */ - int id = index.model()->data(index.siblingAtColumn(0)).toInt(); + int id = index.model()->data(index.sibling(index.row(), 0)).toInt(); if (id != 0) { /* if click is not on other fields than id... */ EditWindow* w = new EditWindow(id, this); w->setAttribute(Qt::WA_DeleteOnClose); /* delete window at the end */ @@ -78,4 +78,4 @@ void MainWindow::on_tableSoci_clicked(const QModelIndex& index) { } } -} \ No newline at end of file +}