C++ 访问我的应用程序中的QSettings
我正在尝试为我的Qt应用程序实现应用程序设置。 我正在使用C++ 访问我的应用程序中的QSettings,c++,qt,qsettings,C++,Qt,Qsettings,我正在尝试为我的Qt应用程序实现应用程序设置。 我正在使用QSettings,创建了一个类的实例,如下所示 settings = new QSettings(qApp->organizationName(), qApp->applicationName()); 我想知道:通过我的应用程序访问我的设置的最佳方式是什么 我需要从不同的类访问一些设置,但我不知道我是否必须只声明和创建一个QSettings实例,并使其在我需要的任何地方都可以访问,或者我是否可以在需要访问一些设置的地方创建
QSettings
,创建了一个类的实例,如下所示
settings = new QSettings(qApp->organizationName(), qApp->applicationName());
我想知道:通过我的应用程序访问我的设置的最佳方式是什么
我需要从不同的类访问一些设置,但我不知道我是否必须只声明和创建一个QSettings实例,并使其在我需要的任何地方都可以访问,或者我是否可以在需要访问一些设置的地方创建本地的
QSettings实例,最好的办法是实现单点设计模式来分配QSET对象,但是要记住,如果你与QSettings共享,你必须处理原子持久性,我的意思是,为了在C++类中保存一些数据,你需要使用SythSyc()方法。我知道您不需要在QML层中使用设置。如果是这种情况,您可以查看方法,以便在QML中使用该方法。在我看来,最好的方法是实现单例设计模式来分配QSettings对象,但请记住,如果您共享QSettings,您必须处理原子持久性,我的意思是,您有时需要使用sync()方法,以便在C++类中持久地存储一些数据。我知道您不需要在QML层中使用设置。如果是这种情况,您可以查看方法,以便在QML中使用该方法。如Qt的文档所述,不需要使用单音:
如果在应用程序中使用多个位置的QSettings,可能需要使用QCoreApplication::setOrganizationName()和QCoreApplication::setApplicationName()指定组织名称和应用程序名称,然后使用默认QSettings构造函数:
然后,在创建QApplication之后:
QApplication app(argc, argv);
QSettings settings;
settings.setValue("example", 68);
设置不同的默认参数:
QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft.com");
QCoreApplication::setApplicationName("Star Runner");
如果要使用QSettingsm,只需使用默认构造函数,该构造函数将从核心应用程序获取默认参数:
QApplication app(argc, argv);
QSettings settings;
settings.setValue("example", 68);
在QML下,备选方案是,SETP相同,配置gui应用程序:
QGuiApplication app(argc, argv);
app.setOrganizationName("Some Company");
app.setOrganizationDomain("somecompany.com");
app.setApplicationName("Amazing Application");
在QML中,设置不同的设置:
Settings {
property alias x: window.x
property alias y: window.y
property alias width: window.width
property alias height: window.height
}
正如Qt的文档所说,不需要使用单音:
如果在应用程序中使用多个位置的QSettings,可能需要使用QCoreApplication::setOrganizationName()和QCoreApplication::setApplicationName()指定组织名称和应用程序名称,然后使用默认QSettings构造函数:
然后,在创建QApplication之后:
QApplication app(argc, argv);
QSettings settings;
settings.setValue("example", 68);
设置不同的默认参数:
QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft.com");
QCoreApplication::setApplicationName("Star Runner");
如果要使用QSettingsm,只需使用默认构造函数,该构造函数将从核心应用程序获取默认参数:
QApplication app(argc, argv);
QSettings settings;
settings.setValue("example", 68);
在QML下,备选方案是,SETP相同,配置gui应用程序:
QGuiApplication app(argc, argv);
app.setOrganizationName("Some Company");
app.setOrganizationDomain("somecompany.com");
app.setApplicationName("Amazing Application");
在QML中,设置不同的设置:
Settings {
property alias x: window.x
property alias y: window.y
property alias width: window.width
property alias height: window.height
}
为了在您的整个应用程序中设置全局设置,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
\ifndef GLOBALSETTINGS\u H
#定义全局设置
#包括
#包括
类全局设置
{
公众:
Q_禁用_复制(全局设置)
静态全局设置*getSettings();
//设置getter和setter
QString设置1()常量;
无效设置设置1(常量字符串和设置1);
QString设置2()常量;
无效设置设置2(常量字符串和设置2);
私人:
//私有构造函数
全局设置();
静态全局设置*m_设置;
QSettings*设置;
//设置成员
QString m_设置1;
QString m_设置2;
};
#endif//GLOBALSETTINGS\u H
以及用于全局设置的cpp文件
#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);
}
#包括“globalsettings.h”
#包括
GlobalSettings*GlobalSettings::m_Settings=NULL;
GlobalSettings::GlobalSettings()
{
设置=新的QSettings(qApp->organizationName(),qApp->applicationName());
如果(!设置->包含(“设置1”))
{
设置->设置值(“设置1”,“某物”);//默认值
}
其他的
{
m_Setting1=设置->值(“设置1”).toString();
}
如果(!设置->包含(“设置2”))
{
设置->设置值(“设置2”,“某物”);//默认值
}
其他的
{
m_Setting2=设置->值(“设置2”).toString();
}
设置->同步();
}
GlobalSettings*GlobalSettings::getSettings()
{
如果(m_设置==NULL)
{
m_设置=新的全局设置();
}
返回m_设置;
}
QString GlobalSettings::Setting1()常量
{
返回m_设置1;
}
无效全局设置::设置设置1(常量q字符串和设置1)
{
m_设置1=设置1;
设置->设置值(“设置1”,设置1);
}
QString全局设置::设置2()常量
{
返回m_设置2;
}
无效全局设置::设置设置2(常量QString和设置2)
{
m_设置2=设置2;
设置->设置值(“设置2”,设置2);
}
下面是如何在你想用的地方使用它
#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();
}
#包括“mainwindow.h”
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
GlobalSettings*设置=GlobalSettings::getSettings();
qDebug()设置1();
主窗口w;
w、 show();
返回a.exec();
}
现在,如果你想拥有线程安全设置类,你可以在get和setter函数中锁定一个互斥锁,以便在你的整个应用程序中有一个全局设置,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
\ifndef GLOBALSETTINGS\u H
#定义GLOBALSETT