mysetting.h
来自「Qt开发的GRE背单词软件」· C头文件 代码 · 共 81 行
H
81 行
/*
* Setting Manager, derived from QSetting
*/
#ifndef MYSETTING_H
#define MYSETTING_H
#include <QSettings>
#include <QDir>
template <class T>
class MySetting : public QSettings
{
typedef std::map<QString, T*> Manager;
public:
QString getUserName() const { return userName; }
static QString findUser(const QString& section, const QVariant& v);
static T* getInstance(const QString& userName);
static void destroySettingManager();
protected:
MySetting(const QString& name);
MySetting(const MySetting& other);
MySetting& operator = (const MySetting& other);
virtual ~MySetting() {}
virtual void loadDefaults() = 0;
private:
static Manager settingManager;
QString userName;
};
template <class T>
MySetting<T>::MySetting(const QString& name)
: QSettings(name+".ini", IniFormat), userName(name) {}
//////////////////////////////////////////////////////////////////////////
// SettingManager
template <class T>
typename MySetting<T>::Manager MySetting<T>::settingManager;
template <class T>
T* MySetting<T>::getInstance(const QString& userName)
{
Manager::iterator it = settingManager.find(userName);
if(it != settingManager.end())
return it->second;
T* setting = new T(userName);
settingManager.insert(std::make_pair(userName, setting));
return setting;
}
template <class T>
QString MySetting<T>::findUser(const QString& section, const QVariant& v)
{
// search all ini files
const QStringList files = QDir().entryList(QStringList() << "*.ini", QDir::Files);
foreach(QString file, files)
{
QSettings setting(file, QSettings::IniFormat);
if(setting.value(section) == v)
return file.left(file.length() - 4); // - .ini
}
return QString();
}
template <class T>
void MySetting<T>::destroySettingManager()
{
for(Manager::iterator it = settingManager.begin(); it != settingManager.end(); ++it)
delete it->second;
settingManager.clear();
}
#endif // MYSETTING_H
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?