[gelöst] QSettings statisch machen - Main Config

Alles rund um die Programmierung mit Qt
Antworten
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

[gelöst] QSettings statisch machen - Main Config

Beitrag von lespaul »

Hallo,

ich habe ein programm geschrieben; dieser hat Einstellungen, diese kann ich mittels Dialogbox unter Datei --> Einstellungen setzten, ändern und lesen:

Code: Alles auswählen

#include "dlgconfig.h"
#include "ui_dlgconfig.h"

/**
 * @brief DlgConfig::DlgConfig
 * @param parent
 */
DlgConfig::DlgConfig(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DlgConfig)
{
    ui->setupUi(this);

    // Main Config
    config = new QSettings("./settings.ini", QSettings::IniFormat);

    readSettings();
}

/**
 * @brief DlgConfig::~DlgConfig
 */
DlgConfig::~DlgConfig()
{
    delete ui;
}

/**
 * @brief DlgConfig::writeSettings
 */
void DlgConfig::writeSettings()
{
    config->beginGroup("General");
    config->setValue("filepath", ui->lineEdit->text());
    config->setValue("measurement", ui->lineEdit_2->text());
    config->setValue("color", ui->lineEdit_3->text());
    config->endGroup();
}

/**
 * @brief DlgConfig::readSettings
 */
void DlgConfig::readSettings()
{
    config->beginGroup("General");
    ui->lineEdit->setText(config->value("filepath").toString());
    ui->lineEdit_2->setText(config->value("measurement").toString());
    ui->lineEdit_3->setText(config->value("color").toString());
    config->endGroup();
}

/**
 * @brief DlgConfig::on_buttonBox_accepted
 */
void DlgConfig::on_buttonBox_accepted()
{
    this->writeSettings();
}

/**
 * @brief DlgConfig::on_buttonBox_rejected
 */
void DlgConfig::on_buttonBox_rejected()
{
    this->close();
}

void DlgConfig::on_lineEdit_2_selectionChanged()
{
    //
}

Ich hätte gerne, dass beispielsweise dass der Dateipfad filepath auch anderen Klassen zur Verfügung steht... Ich bin gerade dabei eine Wrapperklasse zu schreiben.. Oder gibt es da eine Softwaretechnisch standardisierte Lösung?

Ich danke allen Hinweisen.. Gruss Lespaul
Zuletzt geändert von lespaul am 21. März 2014 11:18, insgesamt 3-mal geändert.
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: QSettings statisch machen - Main Config

Beitrag von MichaelS »

Moin,

warum benutzt Du nicht QSettings, wenn Du Zugriff auf die Parameter benötigst?

Gruß Michael
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QSettings statisch machen - Main Config

Beitrag von lespaul »

Du meinst sowas?

Code: Alles auswählen

QString AnyOtherClass::getPath()
{
    QSettings config("./settings.ini", QSettings::IniFormat);
    config.beginGroup("General");
    QString path = config->value("filepath").toString();
    config.endGroup();

   return path;
}
Hm manchmal sieht man den Wald vor lauter Bäumen nicht.
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: QSettings statisch machen - Main Config

Beitrag von MichaelS »

So etwas meinte ich.

Den Aufruf von 'beginGroup' und 'endGroup' kannst Du Dir auch sparen:

Code: Alles auswählen

 QString path = config.value("General/filepath").toString();
führt zum gleichen Ergebnis.

Gruß Michael
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QSettings statisch machen - Main Config

Beitrag von Christian81 »

Der relative Pfad im QSettings-ctor ist gefährlich - dort wird das aktuelle Arbeitsverzeichnis genutzt was nicht immer unbedingt gleich sein muss!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QSettings statisch machen - Main Config

Beitrag von lespaul »

MichaelS hat geschrieben:So etwas meinte ich. ...
Ich habe das mal eingebaut. Es kann sein, dass einige Werte in der *.ini anfangs nicht gesetzt sind, deswegen die Abfrage.

Code: Alles auswählen

QString AnyOtherClass::getCurrentFileName()
{
        QSettings cfg("./settings.ini", QSettings::IniFormat);

        QString fName = cfg.value("General/filepath").toString();

        if ( fName.isEmpty() )
        {
            fName = QFileDialog::getOpenFileName(this,
            tr("Open measurement file"),".",
            tr("Numbers-File (*.dat)"));
        }
        return fName;
}
Mein Problem hier ist folgender: Der QFileDialog::getOpenFileName()-Dialog kommt bereits in der zweiten Zeile mit cfg.value(... Warum?
Zuletzt geändert von lespaul am 10. Februar 2014 23:11, insgesamt 1-mal geändert.
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QSettings statisch machen - Main Config

Beitrag von lespaul »

Christian81 hat geschrieben:Der relative Pfad im QSettings-ctor ist gefährlich - dort wird das aktuelle Arbeitsverzeichnis genutzt was nicht immer unbedingt gleich sein muss!
Sollte ich dann mit getCanonicalFilePath() zusammensetzen?
MichaelS
Beiträge: 240
Registriert: 27. Dezember 2005 12:49

Re: QSettings statisch machen - Main Config

Beitrag von MichaelS »

Mein Problem hier ist folgender: Der QFileDialog::getOpenFileName()-Dialog kommt bereits in der zweiten Zeile mit cfg.value(... Warum?
Was sagt der Debugger dazu?
brax
Beiträge: 208
Registriert: 11. Mai 2010 11:22

Re: QSettings statisch machen - Main Config

Beitrag von brax »

Ich würde empfehlen, solche Daten unter QDir:::homeDirPath()/<myProgram> zu speichern... Nur als Vorschlag... Du kannst natürlich auch die $HOME Umgebungsvariable abfragen, aber Qt macht das schon ganz gut...
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QSettings statisch machen - Main Config

Beitrag von lespaul »

MichaelS hat geschrieben:
Mein Problem hier ist folgender: Der QFileDialog::getOpenFileName()-Dialog kommt bereits in der zweiten Zeile mit cfg.value(... Warum?
Was sagt der Debugger dazu?
Die mocs warten wohl nicht aktuell, nun funktioniert es problemlos? :o
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Re: QSettings statisch machen - Main Config

Beitrag von lespaul »

brax hat geschrieben:Ich würde empfehlen, solche Daten unter QDir:::homeDirPath()/<myProgram> zu speichern... Nur als Vorschlag... Du kannst natürlich auch die $HOME Umgebungsvariable abfragen, aber Qt macht das schon ganz gut...
Danke, das mache ich dann in der endgültigen Release, jetzt beim coden lasse ich des erstmal , da es zZ einfacher ist
Antworten