Path salvataggio QSettings in Windows



  • ciao!

    ho questo codice che salva alcune credenziali con QSettings:

    void ImpostazioniWindow::on_btnDbSave_clicked() {
        QString dbName = ui->txtDbName->text();
        QString dbUser = ui->txtDbUser->text();
        QString dbPassword = ui->txtDbPwd->text();
        QString dbHost = ui->txtDbHost->text();
        QString dbPort = ui->txtDbPort->text();
        if (!dbName.isEmpty() && !dbUser.isEmpty() && !dbPassword.isEmpty() && !dbHost.isEmpty() && !dbPort.isEmpty()) {
            settings.setValue("DB_NAME", dbName);
            settings.setValue("DB_USER", dbUser);
            settings.setValue("DB_PASSWORD", dbPassword);
            settings.setValue("DB_HOST", dbHost);
            settings.setValue("DB_PORT", dbPort);
            close();
        } else {
            QMessageBox msgBox;
            msgBox.setText("Tutti i campi sono obbligatori!");
            msgBox.exec();
        }
    }
    

    funziona perfettamente su linux, e sul 99% dei pc con windows (7 e 10).
    ma su un pc sembra non salvi i dati.
    volevo fare un controllo sull'eventuale file salvato, confrontandolo con gli altri pc.
    ma non riesco a trovare dove viene salvato il file di configurazione.
    sapete aiutarmi??



    • Puoi mostrare dove costruisci settings?
    • settings.setValue("DB_PASSWORD", dbPassword); questo fa male solo a vedersi. enorme falla di sicurezza


  • allora, impostazioni.h

    #ifndef IMPOSTAZIONIWINDOW_H
    #define IMPOSTAZIONIWINDOW_H
    
    #include <QWidget>
    #include <QSettings>
    #include <QMessageBox>
    
    namespace Ui {
    class ImpostazioniWindow;
    }
    
    class ImpostazioniWindow : public QWidget {
        Q_OBJECT
    
    public:
        explicit ImpostazioniWindow(QWidget *parent = 0);
        virtual ~ImpostazioniWindow();
    
    private slots:
        void on_btnDbSave_clicked();
    
    private:
        Ui::ImpostazioniWindow *ui;
        QSettings settings;
    };
    
    #endif // IMPOSTAZIONIWINDOW_H
    

    impostazioni.cpp

    #include "impostazioniwindow.h"
    #include "ui_impostazioniwindow.h"
    
    ImpostazioniWindow::ImpostazioniWindow(QWidget *parent) : QWidget(parent), ui(new Ui::ImpostazioniWindow) {
        ui->setupUi(this);
    
        ui->tabWidget->removeTab(1);
    }
    
    void ImpostazioniWindow::on_btnDbSave_clicked() {
        QString dbName = ui->txtDbName->text();
        QString dbUser = ui->txtDbUser->text();
        QString dbPassword = ui->txtDbPwd->text();
        QString dbHost = ui->txtDbHost->text();
        QString dbPort = ui->txtDbPort->text();
        if (!dbName.isEmpty() && !dbUser.isEmpty() && !dbPassword.isEmpty() && !dbHost.isEmpty() && !dbPort.isEmpty()) {
            settings.setValue("DB_NAME", dbName);
            settings.setValue("DB_USER", dbUser);
            settings.setValue("DB_PASSWORD", dbPassword);
            settings.setValue("DB_HOST", dbHost);
            settings.setValue("DB_PORT", dbPort);
            close();
        } else {
            QMessageBox msgBox;
            msgBox.setText("Tutti i campi sono obbligatori!");
            msgBox.exec();
        }
    }
    
    ImpostazioniWindow::~ImpostazioniWindow() {
        delete ui;
    }
    

    falla di sicurezza perchè scrivo la pwd su file??
    si lo so, ma parliamo di un programma ad uso aziendale.
    non saprebbero che farci con quella pwd, la scrivo nel programma al primo avvio, e non saprebbero neanche che farci....



  • Visto che usi il default constructor per QSettings quello non viene salvato su file ma su chiavi di registro di windows (a visibilita' per-utente hkey_local_user).

    Se vuoi forzare il salvataggio su file anche in windows:

    ImpostazioniWindow::ImpostazioniWindow(QWidget *parent) : QWidget(parent), ui(new Ui::ImpostazioniWindow)
    , settings(QSettings::IniFormat,QSettings::UserScope	
    #ifdef Q_OS_MAC
                                            QCoreApplication::organizationDomain().isEmpty()
                                                ? QCoreApplication::organizationName()
                                                : QCoreApplication::organizationDomain()
    #else
                                            QCoreApplication::organizationName().isEmpty()
                                                ? QCoreApplication::organizationDomain()
                                                : QCoreApplication::organizationName()
    #endif
    , QCoreApplication::applicationName()))
     {
    


  • penso che salverò su file.
    su alcune versioni di windows mi da problemi il salvataggio su registro.

    ma non ho capito una cosa.
    perchè quell'if su Q_OS_MAC?
    sul mac non viene già salvato su file come su linux?



  • @fermatqt said in Path salvataggio QSettings in Windows:

    perchè quell'if su Q_OS_MAC?

    Ho semplicemente copiato e incollato il sorgente di Qt con la sola modifica di usare QSettings::IniFormat



  • @VRonin said in Path salvataggio QSettings in Windows:

    @fermatqt said in Path salvataggio QSettings in Windows:

    perchè quell'if su Q_OS_MAC?

    Ho semplicemente copiato e incollato il sorgente di Qt con la sola modifica di usare QSettings::IniFormat

    ah ok ok.

    grazie!!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.