stefanoxjx
15-11-2016, 17:09
Ciao a tutti, sto imparando contemporaneamente a programmare in C++ e ad usare le Qt.
Ho letto un po' di libri ed ora sto cercando di cimentarmi sviluppando un programma che è già a buon punto, ma ovviamente mi sono lasciato dei dubbi alle spalle che se possibile vorrei chiarire con voi.
Punto 1: Il programma che sto sviluppando ha vari files .h e .cpp.
In questi files uso delle costanti che sono comuni a tutti e per non riscriverle tutte ogni volta su ogni file (altrimenti non vengono viste) ho creato un file header con nome costanti.h che vado ad includere su ogni file.
Volevo capire se questo è il modo più giusto per avere visibilità globale delle costanti o se ci sono altri modi.
Punto 2: Il programma ha una finestra principale e una finestra Opzioni.
Non sono riuscito a capire come potrei fare ad intercettare dalla finestra principale l'uscita dalla finestra "Opzioni" per richiamare un metodo che faccia degli aggiornamenti sulla finestra principale.
Mi spiego meglio, quando selezioni "Opzioni" mi si apre una nuova finestra con delle opzioni che io posso cambiare oppure no.
Vorrei che quando confermo le "Opzioni" con OK, mi si chiuda la finestra opzioni (come succede ora) ma la finestra principale sapendo di aver ripreso il controllo richiami un metodo per rileggere le impostazioni ed aggiornarsi.
Pensavo ad un segnale inerente al Focus ma su QMainWindow non trovo segnali simili.
Punto 3: Ho collegato un segnale ad uno slot con il seguente comando:
connect(&cmbTarget, SIGNAL(currentIndexChanged(int)), this, SLOT(on_cmbTarget_currentIndexChanged(int)));
e il programma funziona senza problemi, però mi segnala questo:
QMetaObject::connectSlotsByName: No matching signal for on_cmbTarget_currentIndexChanged(int)
Ho fatto delle ricerche in merito e da quello che ho capito è perchè all'inizio avevo definito lo slot con nome diverso dal segnale.
Allora ho modificato il nome dello slot ed effettivamente il messaggio era inizialmente sparito.
Ora a volte c'è e altre no e non riesco a capire il perchè.
Punto 4: Avendo una serie di widget TextLine da completare tramite settings.value, esiste un metodo tipo foreach o simili per non maneggiarli uno ad uno?
Questo è il codice che ho scritto
ui->lineEditName1->setText(settings.value(sKeyName1).toString());
ui->lineEditName2->setText(settings.value(sKeyName2).toString());
ui->lineEditName3->setText(settings.value(sKeyName3).toString());
ui->lineEditName4->setText(settings.value(sKeyName4).toString());
ui->lineEditName5->setText(settings.value(sKeyName5).toString());
ui->lineEditName6->setText(settings.value(sKeyName6).toString());
ui->lineEditTel1->setText(settings.value(sKeyTel1).toString());
ui->lineEditTel2->setText(settings.value(sKeyTel2).toString());
ui->lineEditTel3->setText(settings.value(sKeyTel3).toString());
ui->lineEditTel4->setText(settings.value(sKeyTel4).toString());
ui->lineEditTel5->setText(settings.value(sKeyTel5).toString());
ui->lineEditTel6->setText(settings.value(sKeyTel6).toString());
ma magari con un foreach o simili me la cavo con 3 righe.
Spero che qualcuno mi possa aiutare a chiarirmi le idee.
Grazie.
Stefano
Ho letto un po' di libri ed ora sto cercando di cimentarmi sviluppando un programma che è già a buon punto, ma ovviamente mi sono lasciato dei dubbi alle spalle che se possibile vorrei chiarire con voi.
Punto 1: Il programma che sto sviluppando ha vari files .h e .cpp.
In questi files uso delle costanti che sono comuni a tutti e per non riscriverle tutte ogni volta su ogni file (altrimenti non vengono viste) ho creato un file header con nome costanti.h che vado ad includere su ogni file.
Volevo capire se questo è il modo più giusto per avere visibilità globale delle costanti o se ci sono altri modi.
Punto 2: Il programma ha una finestra principale e una finestra Opzioni.
Non sono riuscito a capire come potrei fare ad intercettare dalla finestra principale l'uscita dalla finestra "Opzioni" per richiamare un metodo che faccia degli aggiornamenti sulla finestra principale.
Mi spiego meglio, quando selezioni "Opzioni" mi si apre una nuova finestra con delle opzioni che io posso cambiare oppure no.
Vorrei che quando confermo le "Opzioni" con OK, mi si chiuda la finestra opzioni (come succede ora) ma la finestra principale sapendo di aver ripreso il controllo richiami un metodo per rileggere le impostazioni ed aggiornarsi.
Pensavo ad un segnale inerente al Focus ma su QMainWindow non trovo segnali simili.
Punto 3: Ho collegato un segnale ad uno slot con il seguente comando:
connect(&cmbTarget, SIGNAL(currentIndexChanged(int)), this, SLOT(on_cmbTarget_currentIndexChanged(int)));
e il programma funziona senza problemi, però mi segnala questo:
QMetaObject::connectSlotsByName: No matching signal for on_cmbTarget_currentIndexChanged(int)
Ho fatto delle ricerche in merito e da quello che ho capito è perchè all'inizio avevo definito lo slot con nome diverso dal segnale.
Allora ho modificato il nome dello slot ed effettivamente il messaggio era inizialmente sparito.
Ora a volte c'è e altre no e non riesco a capire il perchè.
Punto 4: Avendo una serie di widget TextLine da completare tramite settings.value, esiste un metodo tipo foreach o simili per non maneggiarli uno ad uno?
Questo è il codice che ho scritto
ui->lineEditName1->setText(settings.value(sKeyName1).toString());
ui->lineEditName2->setText(settings.value(sKeyName2).toString());
ui->lineEditName3->setText(settings.value(sKeyName3).toString());
ui->lineEditName4->setText(settings.value(sKeyName4).toString());
ui->lineEditName5->setText(settings.value(sKeyName5).toString());
ui->lineEditName6->setText(settings.value(sKeyName6).toString());
ui->lineEditTel1->setText(settings.value(sKeyTel1).toString());
ui->lineEditTel2->setText(settings.value(sKeyTel2).toString());
ui->lineEditTel3->setText(settings.value(sKeyTel3).toString());
ui->lineEditTel4->setText(settings.value(sKeyTel4).toString());
ui->lineEditTel5->setText(settings.value(sKeyTel5).toString());
ui->lineEditTel6->setText(settings.value(sKeyTel6).toString());
ma magari con un foreach o simili me la cavo con 3 righe.
Spero che qualcuno mi possa aiutare a chiarirmi le idee.
Grazie.
Stefano