アプリケーション全体singleton
のグローバル設定がいいアイデアかもしれない持つためには、私は、設定クラスのパターンを持っていると私はここに多分便利なポストあなたと他の人に。
ここでは、私はGlobalSettings
クラスを持っています。これは、シングルトンであるヘッダーとcppファイルです。
ヘッダファイル:
#ifndef GLOBALSETTINGS_H
#define GLOBALSETTINGS_H
#include <QSettings>
#include <QObject>
class GlobalSettings
{
public:
Q_DISABLE_COPY(GlobalSettings)
static GlobalSettings* getSettings();
// Settings getter and setters
QString Setting1() const;
void setSetting1(const QString &Setting1);
QString Setting2() const;
void setSetting2(const QString &Setting2);
private:
// private constructor
GlobalSettings();
static GlobalSettings * m_Settings;
QSettings * settings;
// Settings memebers
QString m_Setting1;
QString m_Setting2;
};
#endif // GLOBALSETTINGS_H
とGlobalSettings
#include "globalsettings.h"
#include <QCoreApplication>
GlobalSettings * GlobalSettings::m_Settings = NULL;
GlobalSettings::GlobalSettings()
{
settings = new QSettings(qApp->organizationName(), qApp->applicationName());
if (!settings->contains("Setting1"))
{
settings->setValue("Setting1","Something"); // default value
}
else
{
m_Setting1 = settings->value("Setting1").toString();
}
if (!settings->contains("Setting2"))
{
settings->setValue("Setting2","Something"); // default value
}
else
{
m_Setting2 = settings->value("Setting2").toString();
}
settings->sync();
}
GlobalSettings *GlobalSettings::getSettings()
{
if (m_Settings == NULL)
{
m_Settings = new GlobalSettings();
}
return m_Settings;
}
QString GlobalSettings::Setting1() const
{
return m_Setting1;
}
void GlobalSettings::setSetting1(const QString &Setting1)
{
m_Setting1 = Setting1;
settings->setValue("Setting1",Setting1);
}
QString GlobalSettings::Setting2() const
{
return m_Setting2;
}
void GlobalSettings::setSetting2(const QString &Setting2)
{
m_Setting2 = Setting2;
settings->setValue("Setting2",Setting2);
}
、ここであなたが
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <globalsettings.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
GlobalSettings * setting = GlobalSettings::getSettings();
qDebug() << setting->Setting1();
MainWindow w;
w.show();
return a.exec();
}
となりました場合を使用したいところ今までそれを使用する方法であるためCPPファイルあなたはgetとsetter関数でmutexをロックするかもしれないスレッドセーフな設定クラスを持っています
メインウィンドウのコンストラクタでQSettingsの一意のインスタンスを作成する場合は、シングルトン設計が必要ですか?次回のアプリ起動時に設定を考慮する必要があるので、おそらくsync()を呼び出す必要はありません。 – nmud
@jgdはい、シングルトンクラスのグローバル設定にアクセスするのに最適です+1 – saeed
@nmud sync()はpersistの直後に呼び出されます。あなたは書き込みをするか、設定を読み込むだけですか? – jgd