Qt使用QSetting对ini配置文件进行读取和写入
INI文件是Initialization File的缩写,即初始化文件,主要用来保存程序经常用到的一些配置参数。在Qt中可以使用QSetting类来实现ini文件的读取和写入。
一、ini文件格式
ini文件主要有节(section)、键(key)、键值(value)部分组成。
节 (section) 用方括号括起来,单独占一行,例如:
[section]
键(key)又名属性(property),单独占一行用等号连接键名和键值,例如:
name=value
一个很简单的ini文件例子:
[Basic]
age=18
name=LiLei
school=JJUV
[Capability]
jump=3m
run=5km
二、Qt中操作ini文件的方法
向ini文件写入:
第一种方法:
// 根据ini文件路径新建QSettings类
QSettings m_IniFile = new QSettings("ini文件的路径", QSettings::IniFormat);
//通过setValue函数将键值对放在相对于的节下面
m_IniFile->setValue( “节名” + “/” + “键名”, “键对应的值”);
第二种方法:
// 根据ini文件路径新建QSettings类
QSettings m_IniFile = new QSettings("ini文件的路径", QSettings::IniFormat);
m_IniFile ->beginGroup(“节名”); // 设置当前节名,代表以下的操作都是在这个节中
m_IniFile->setValue( “键名”, “键对应的值”); // 因为上面设置了节了,这里不在需要把节名写上去
m_IniFile.endGroup(); // 结束当前节的操作
从ini文件读取:
//通过Value函数将节下相对应的键值读取出来
QString value = m_IniFile->Value( "节名" + "/" + "键名").toString;
方法同写入的方法
三、Qt使用QSetting对ini文件进行读写的示例
新建名为ini_use的工程,基类为QWidget,类名称为ini_use
工程文件列表如下
ui界面如下:
具体代码如下:
ini_use.h
#ifndef INI_USE_H
#define INI_USE_H
#include <QWidget>
#include <QSettings>
#include <QtDebug>
namespace Ui {
class ini_use;
}
class ini_use : public QWidget
{
Q_OBJECT
public:
explicit ini_use(QWidget *parent = nullptr);
~ini_use();
private slots:
void on_setBtn_clicked();
<span class="token keyword">void</span> <span class="token function">on_getBtn_clicked</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
private:
Ui::ini_use *ui;
QSettings <span class="token operator">*</span>m_IniFile<span class="token punctuation">;</span>
};
#endif // INI_USE_H
#include "ini_use.h" #include "ui_ini_use.h" ini_use::ini_use(QWidget *parent) : QWidget(parent), ui(new Ui::ini_use) { ui->setupUi(this); //获取应用程序可执行文件所在的目录 qDebug()<<"current applicationDirPath: "<<QCoreApplication::applicationDirPath(); // 实例化QSettigns,在应用程序可执行文件所在的目录中打开或者新建info.ini文件 m_IniFile = new QSettings(QCoreApplication::applicationDirPath()+"/info.ini", QSettings::IniFormat); } ini_use::~ini_use() { delete ui; } void ini_use::on_setBtn_clicked() { m_IniFile->setValue( ui->sectionEdit->text() + "/" + ui->keyEdit->text(), ui->valueEdit->text()); } void ini_use::on_getBtn_clicked() { ui->valueEdit->setText(m_IniFile->value(ui->sectionEdit->text() + "/" + ui->keyEdit->text()).toString()); }
main.cpp
#include "ini_use.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); ini_use w; w.show(); return a.exec(); }
程序运行如下
info.ini文件被创建在应用程序可执行文件所在的目录中。
可以通过界面添加节、键和键值,按下 setData 按钮会将内容写入到 info.ini 文件中。
读取时,在section和key中输入相应内容,点击getData按钮则输出相应的值。另外,可以直接打开 info.ini 文件,按照格式改动文件,此时,需要重新启动程序,才能将改动的内容反应出来。比如,程序运行中手动在文件中添加了
[section3] weight=60kg
此时通过界面是找不到内容的。当再次运行时则能够找到。