Seite 1 von 1

[gelöst] QSettings statisch machen - Main Config

Verfasst: 9. Februar 2014 20:02
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

Re: QSettings statisch machen - Main Config

Verfasst: 10. Februar 2014 08:48
von MichaelS
Moin,

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

Gruß Michael

Re: QSettings statisch machen - Main Config

Verfasst: 10. Februar 2014 10:32
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.

Re: QSettings statisch machen - Main Config

Verfasst: 10. Februar 2014 13:03
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

Re: QSettings statisch machen - Main Config

Verfasst: 10. Februar 2014 18:26
von Christian81
Der relative Pfad im QSettings-ctor ist gefährlich - dort wird das aktuelle Arbeitsverzeichnis genutzt was nicht immer unbedingt gleich sein muss!

Re: QSettings statisch machen - Main Config

Verfasst: 10. Februar 2014 23:08
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?

Re: QSettings statisch machen - Main Config

Verfasst: 10. Februar 2014 23:09
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?

Re: QSettings statisch machen - Main Config

Verfasst: 13. Februar 2014 16:24
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?

Re: QSettings statisch machen - Main Config

Verfasst: 14. Februar 2014 02:03
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...

Re: QSettings statisch machen - Main Config

Verfasst: 21. März 2014 11:17
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

Re: QSettings statisch machen - Main Config

Verfasst: 21. März 2014 11:18
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