Wenn ich
Qt::WA_DeleteOnClose nutze, zerstöre ich das Objekt aber dauerhaft. d.h. bei einen erneuten Drücken des Knopfes passiert nichts mehr.
Ok, Folgendes Codebeispiel:
configfile.h
Code: Alles auswählen
#ifndef CONFIGFILE_H
#define CONFIGFILE_H
#include <QWidget>
#include <QSettings>
class ConfigFile : public QWidget
{
Q_OBJECT
public:
explicit ConfigFile(QWidget *parent = 0);
~ConfigFile();
QVariant readValue(const QString &key);
void writeValue(const QString &key, QVariant value);
void writeConfig();
private:
QSettings *settings;
signals:
public slots:
};
#endif // CONFIGFILE_H
configfile.cpp
Code: Alles auswählen
#include "configfile.h"
#include <QSettings>
#include <QFile>
ConfigFile::ConfigFile(QWidget *parent) :
QWidget(parent)
{
settings = new QSettings("config.ini",QSettings::IniFormat,this);
settings->beginGroup("config");
}
QVariant ConfigFile::readValue(const QString &key)
{
return(settings->value(key));
}
void ConfigFile::writeValue(const QString &key, QVariant value)
{
settings->setValue(key,value);
}
void ConfigFile::writeConfig()
{
}
ConfigFile::~ConfigFile()
{
settings->endGroup();
}
dialog.h
Code: Alles auswählen
#ifndef DIALOG_H
#define DIALOG_H
#include "configfile.h"
#include <QDialog>
#include <QGridLayout>
class Dialog : public QDialog
Q_OBJECT
public:
explicit Dialog();
~Dialog();
private:
QGridLayout *layoutMain;
ConfigFile *configFile;
signals:
public slots:
};
#endif // DIALOG_H
dialog.cpp
Code: Alles auswählen
#include "dialog.h"
#include "configfile.h"
#include <QGridLayout>
#include <QLabel>
Dialog::Dialog()
{
configFile = new ConfigFile;
QLabel *label = new QLabel(configFile->readValue("label").toString());
layoutMain->addWidget(label);
setLayout(layoutMain);
}
Dialog::~Dialog()
{
}
Und die Main wie gehabt....
Wenn ich also über ein Konfigurationsmenu den Wert in der Konfigurationsdatei ändere, und diesen Dialog neu Aufrufe, nachdem ich ihn geschlossen habe, dann sollte sich dieser "neu" aufbauen.
Eine "update" variante habe ich schon implementiert, aber ich finde diese "Methode" etwas unglücklich.
Hier mal das Bsp:
Code: Alles auswählen
public:
explicit ConfigColors(QWidget *parent = 0);
void loadValues();
void storeValues();
Code: Alles auswählen
void ConfigColors::loadValues()
{
BackgroundColor = configFile->readValue("BackgroundColor").value<QColor>();
ArrowFillColor = configFile->readValue("ArrowFillColor").value<QColor>();
ArrowFrameColor = configFile->readValue("ArrowFrameColor").value<QColor>();
pixmapBackgroundColor.fill(BackgroundColor);
pushbuttonBackgroundColor->setIcon(pixmapBackgroundColor);
pixmapArrowFillColor.fill(ArrowFillColor);
pushbuttonArrowFillColor->setIcon(pixmapArrowFillColor);
pixmapArrowFrameColor.fill(ArrowFrameColor);
pushbuttonArrowFrameColor->setIcon(pixmapArrowFrameColor);
}
void ConfigColors::storeValues()
{
configFile->writeValue("BackgroundColor",BackgroundColor);
configFile->writeValue("ArrowFillColor",ArrowFillColor);
configFile->writeValue("ArrowFrameColor",ArrowFrameColor);
}
Sowie die im darüberliegenden Widget entspechende Abfragen.
Code: Alles auswählen
void ConfigDialog::acceptConfig()
{
configColors->storeValues();
}
void ConfigDialog::rejectConfig()
{
configColors->loadValues();
}