非类型类模板参数的一个应用场景,封装QSettings

非类型模板参数的一个应用场景

原始代码

#include <QCoreApplication>
#include <QSettings>

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSettings::setDefaultFormat(QSettings::IniFormat);
    QSettings settings;
    settings.setValue("length", 100);
    cout<<settings.value("length").toInt()<<endl;
    return a.exec();
}

以上代码是使用QSettings设置配置信息,调用配置信息的一个简单实例。从这里看,似乎没有什么可以改的。不过使用下面的代码之后,配置和获取信息将更加直观。如下

新建一个Settings类包装一下QSettings

头文件和源文件如下


#ifndef SETTINGS_H
#define SETTINGS_H

#include <QObject>
#include <QString>
#include <QSettings>

class Settings : public QObject
{
    Q_OBJECT
public:
    static const char length[];

public:
    explicit Settings(QObject *parent = 0) : QObject(parent) {
    }

    template<const char* name, int deflt = 0>
    class IntRef {
    public:
        operator int() const {
            return QSettings().value(name, deflt).toInt();
        }

        IntRef& operator = (int i) {
            QSettings().setValue(name, i);
            return *this;
        }
    };

    IntRef<length, 20>          len;

};

#endif // SETTINGS_H

#include "settings.h"

const char  Settings::length[] = "len";

测试

#include <iostream>
using namespace std;

#include <QCoreApplication>
#include <QSettings>

#include "settings.h"


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSettings::setDefaultFormat(QSettings::IniFormat);

    Settings settings;
    cout<< settings.len << endl;
    settings.len = 100;
    cout<< settings.len << endl;
    int test = settings.len;
    cout << test << endl;
    return a.exec();
}

使用Settings之后,就可以更直观的操作配置参数了。省去了相对繁琐的setvalue和value操作,重载了=和(),可以像操作基本数据类型一样操作Settings

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值