Qt读写ini文件demo

简述

qt封装读写ini文件,同时写了一个测试的demo。该工程编译运行正常,操作正常,可以在自己的工程上直接引用pri文件,添加该功能,便于工程的开发。该工程下载路径:https://download.csdn.net/download/linyibin_123/86341915

核心文件
1.ctsettings.pri
HEADERS += \
    $$PWD/ctsettings.h \
    $$PWD/myqsettings.h

SOURCES += \
    $$PWD/ctsettings.cpp \
    $$PWD/myqsettings.cpp
2.myqsettings.h
#ifndef MYQSETTINGS_H
#define MYQSETTINGS_H

#include <QSettings>


class MyQSettings : public QSettings
{
public:
    explicit MyQSettings(const QString& filePath, const QString& fileName);
    void setValue(const QString& group, const QString& key, const QVariant& varian);
    QVariant getValue(const QString& group, const QString& key, const QVariant &defaultValue = QVariant());
    bool IsFileExist();


private:
    QSettings* m_pSettings;

};

#endif // MYQSETTINGS_H

3.myqsettings.cpp
#include "myqsettings.h"
#include "commondef.h"
#include <QDir>
#include <QDebug>
#include <QTextCodec>

MyQSettings::MyQSettings(const QString &filePath, const QString &fileName)
{
    QDir dir(filePath);
    if (!dir.exists())
    {
        dir.mkpath(filePath);
    }
    m_pSettings = new QSettings(filePath + fileName, QSettings::IniFormat);
    m_pSettings->setIniCodec(QTextCodec::codecForName("UTF-8"));
}

void MyQSettings::setValue(const QString &group, const QString &key, const QVariant &varian)
{
    m_pSettings->beginGroup(group);
    m_pSettings->setValue(key, varian);
    m_pSettings->endGroup();
}

QVariant MyQSettings::getValue(const QString &group, const QString &key, const QVariant &defaultValue)
{
    m_pSettings->beginGroup(group);
    QVariant ret = m_pSettings->value(key, defaultValue);
    m_pSettings->endGroup();

    return ret;
}

bool MyQSettings::IsFileExist()
{
    return QFile::exists(m_pSettings->fileName());
}

4.ctsettings.h
#ifndef SETTINGS_H
#define SETTINGS_H

#include <QObject>
#include <QVariant>

#define INI_FILE_NAME         "settings.ini"

class MyQSettings;

class CtSettings : public QObject
{
    Q_OBJECT
public:
    enum class GroupType {
        TCP,
        SerialPort,
        Language,
    };

    enum class KeyType {
        IP,
        Port,
        Type,

        SerialPort,
        BaudRate,
        DataBit,
        CheckBit,
        StopBit,

        Language
    };

    static CtSettings& getInstance();
    void setValue(GroupType groupType, KeyType keyType, QVariant value);
    QVariant getValue(GroupType groupType, KeyType keyType);
private:
    explicit CtSettings(QObject *parent = nullptr);
    void initMap();
    void setValue(const QString& group, const QString& key, const QVariant& value);
    QVariant getValue(const QString& group, const QString& key);

private:
    QMap<GroupType, QString> m_groupMap;
    QMap<KeyType, QString> m_keyMap;

    MyQSettings* m_pSettingsHandle = Q_NULLPTR;
};

#endif // SETTINGS_H
5.ctsettings.cpp
#include "ctsettings.h"
#include "myqsettings.h"
#include <QDebug>
#include <QCoreApplication>
#include "commondef.h"

CtSettings &CtSettings::getInstance()
{
    static CtSettings s_set;
    return s_set;
}

void CtSettings::setValue(CtSettings::GroupType groupType, CtSettings::KeyType keyType, QVariant value)
{
    QString group = m_groupMap.value(groupType);
    QString key = m_keyMap.value(keyType);

    setValue(group, key, value);
}

QVariant CtSettings::getValue(CtSettings::GroupType groupType, CtSettings::KeyType keyType)
{
    QString group = m_groupMap.value(groupType);
    QString key = m_keyMap.value(keyType);

    return getValue(group, key);
}

CtSettings::CtSettings(QObject *parent) : QObject(parent)
{
    initMap();

    m_pSettingsHandle = new MyQSettings(QCoreApplication::applicationDirPath() + "/settings/", INI_FILE_NAME);
    if (m_pSettingsHandle->IsFileExist())
    {
        MY_DEBUG << "CtSettings file exist";
    }
    else
    {
        MY_DEBUG << "CtSettings file unexist";
    }
}

void CtSettings::initMap()
{
    m_groupMap.insert(GroupType::TCP, "TCP");
    m_keyMap.insert(KeyType::IP, "IP");
    m_keyMap.insert(KeyType::Port, "Port");
    m_keyMap.insert(KeyType::Type, "Type");

    m_groupMap.insert(GroupType::SerialPort, "SerialPort");
    m_keyMap.insert(KeyType::SerialPort, "SerialPort");
    m_keyMap.insert(KeyType::BaudRate, "BaudRate");
    m_keyMap.insert(KeyType::DataBit, "DataBit");
    m_keyMap.insert(KeyType::CheckBit, "CheckBit");
    m_keyMap.insert(KeyType::StopBit, "StopBit");

    m_groupMap.insert(GroupType::Language,"Language");
    m_keyMap.insert(KeyType::Language, "Language");

}

void CtSettings::setValue(const QString &group, const QString &key, const QVariant &value)
{
    m_pSettingsHandle->setValue(group, key, value);
}

QVariant CtSettings::getValue(const QString &group, const QString &key)
{
    return m_pSettingsHandle->getValue(group, key);
}

使用(main.cpp)
#include <QCoreApplication>
#include "ctsettings.h"
#include "commondef.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    CtSettings::getInstance().setValue(CtSettings::GroupType::TCP, CtSettings::KeyType::IP, "192.168.8.100");
    CtSettings::getInstance().setValue(CtSettings::GroupType::TCP, CtSettings::KeyType::Port, 80);
    CtSettings::getInstance().setValue(CtSettings::GroupType::TCP, CtSettings::KeyType::Type, 0);

    CtSettings::getInstance().setValue(CtSettings::GroupType::SerialPort, CtSettings::KeyType::SerialPort, "COM1");
    CtSettings::getInstance().setValue(CtSettings::GroupType::SerialPort, CtSettings::KeyType::BaudRate, 115200);
    CtSettings::getInstance().setValue(CtSettings::GroupType::SerialPort, CtSettings::KeyType::DataBit, 1);
    CtSettings::getInstance().setValue(CtSettings::GroupType::SerialPort, CtSettings::KeyType::CheckBit, 1);
    CtSettings::getInstance().setValue(CtSettings::GroupType::SerialPort, CtSettings::KeyType::StopBit, 1);

    CtSettings::getInstance().setValue(CtSettings::GroupType::Language, CtSettings::KeyType::Language, "Chinese");

    QString strIP = CtSettings::getInstance().getValue(CtSettings::GroupType::TCP, CtSettings::KeyType::IP).toString();
    int nPort = CtSettings::getInstance().getValue(CtSettings::GroupType::TCP, CtSettings::KeyType::Port).toInt();

    MY_DEBUG << "strIP: " << strIP << ", nPort:" << nPort;

    return a.exec();
}

结果展示:

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅笑一斤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值