简述
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();
}