Чтобы иметь глобальные настройки во всем приложении, 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
и файл cpp для 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();
}
и теперь, если вы хотите иметь класс настроек потокобезопасности, вы можете заблокировать мьютекс в функциях get и setter
person
saeed
schedule
31.10.2017