前言
我们在设计软件得时候很多时候会用到设置得保存,例如用户使用最多得串口助手,当设置好串口得波特率、校验位等等设置过后用户肯定是希望下次打开得时候能恢复昨天工作调试得配置而不是打开软件过后还需要再重复设置一遍,所以我们就需要学习一下ini文件配置读写,其实通过文件读写得方式也是可以实现相同得效果,但是QT给我们提供了ini文件读写得接口,在配置设置得过程中为我们提供了很多便利,接下来我们看看效果。
思路
当我们打开软件得时候首先读取ini配置文件中是否有存在得设置,如果没有得话我们就设置默认得程序配置,但读取到配置文件设置得时候就将该设置放置到该控件得数值,但我们软件进行关闭得时候将页面上得设置写入到ini文件中,下面是具体得实现代码。
iniConfig.cpp
#include "iniconfig.h" iniConfig::iniConfig() { } // 用户需要修改保存配置.INI文件得位置得时候修改这行地址,相对于写入函数也需要修改,但然这个封装还可以继续优化将文件位置也提供给用户设置 // QString m_sProjectPath = QCoreApplication::applicationDirPath();//获取exe文件所在目录 void iniConfig::writeIniValue(QString key_root, QString key, QString value) { QString m_sProjectPath = QCoreApplication::applicationDirPath();//获取exe文件所在目录 //第二个参数表明是ini文件格式 QSettings *configIni = new QSettings (QString("%1/" +key_root ).arg(m_sProjectPath),QSettings::IniFormat); configIni->setIniCodec(QTextCodec::codecForName("System"));//确保键值可以是中文 configIni->beginGroup(key_root); configIni->setValue(key, value); // configIni->setValue("Directory", m_sProjectPath); configIni->endGroup(); delete configIni; } // 用户需要修改保存配置.INI文件得位置得时候修改这行地址 // QString m_sProjectPath = QCoreApplication::applicationDirPath();//获取exe文件所在目录 QString iniConfig::getIniValue(QString key_root, QString key) { QString m_sProjectPath = QCoreApplication::applicationDirPath();//获取exe文件所在目录 QSettings *configIni = new QSettings (QString("%1/"+ key_root ).arg(m_sProjectPath),QSettings::IniFormat); configIni->setIniCodec(QTextCodec::codecForName("System"));//确保读出来的中文键值可以正常解析 QString value = configIni->value(key_root+ "/" + key,QString("")).toString(); // QString Directory= configIni->value("Config/Directory",m_sProjectPath).toString(); delete configIni; return value; }
iniConfig.h
#ifndef INICONFIG_H #define INICONFIG_H #include <QString> #include <QSettings> #include <QTextCodec> #include <QCoreApplication> class iniConfig { public: iniConfig(); QString getIniValue(QString key_root, QString key); void writeIniValue(QString key_root, QString key, QString value); }; #endif // INICONFIG_H
使用方法
刚刚在思路得时候介绍了软件得打开和关闭其实和窗口类得构造和析构函数相对于,所以我们只需要在这两个函数中添加读和写就完成了我们得效果。
iniConfig *ini = new iniConfig(); // 读取上一次地址配置getIniValue第一个数值是指配置文件名字,第二个是配置参数 ui->edit_ip->setText(ini->getIniValue("Config.ini","ADDRESS")); ui->edit_port->setText(ini->getIniValue("Config.ini","PORT")); // 保存地址配置 writeIniValue第一个参数配置文件名然后是参数最后是内容 ini->writeIniValue("Config.ini","ADDRESS",ui->edit_ip->text()); ini->writeIniValue("Config.ini","PORT",ui->edit_port->text());