QT读写.INI文件的实现方法

一、ini文件的概念

INI文件,即Initialization File的缩写,是Windows系统配置文件的一种存储格式,用于管理Windows的各种配置。通常,用户可以通过Windows提供的图形化管理界面来进行相同的配置设置。然而,在某些特定情况下,直接编辑INI文件更为方便,这通常需要对Windows系统有较深入的了解。

二、QT中读写INI文件的基本方法

1、引入头文件

在使用QT进行INI文件的读写操作之前,需要包含相关的头文件:

#include 

2、写入INI文件

(1)定义一个QSettings指针对象,例如:

QSettings *configIniWrite;

(2)实例化对象,例如:

configIniWrite = new QSettings("INI", QSettings::IniFormat);

(3)写入INI文件

configIniWrite->setValue("/Setting/xxx", "100");

(4)释放对象的堆内存

delete configIniWrite;

3、读取INI文件

(1)定义一个QSettings指针对象,例如:

QSettings *configIniRead;

(2)实例化对象,例如:

configIniRead = new QSettings("INI", QSettings::IniFormat);

(3)获取INI文件中的键值,键值可以是字符串或其他类型(前提是,INI文件存在且文件名可以自定义),例如:

QString str = configIniRead->value("/Setting/xxx").toString();
qDebug() << str;

我们可以将读写Config.ini的过程封装成两个API,以便直接调用。以下是一个简单的示例:

三、示例实现

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    void writeConfigIniForInt(QString __keyRoot, QString __keyValue, int value);
    QString readConfigIni(QString __keyRoot, QString __keyValue);
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#define CONFIG_INI_NAME "C:/Users/Administrator/Desktop/QT_study/Config.ini"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 写入配置参数到 CONFIG_INI_NAME
    writeConfigIniForInt("SETTING", "VOL", 100);
    QString str = readConfigIni("SETTING", "VOL");
    qDebug() << str;
}

MainWindow::~MainWindow()
{
    delete ui;
}

// 读取配置文件
QString MainWindow::readConfigIni(QString __keyRoot, QString __keyValue)
{
    QSettings *configIniRead = new QSettings(CONFIG_INI_NAME, QSettings::IniFormat);
    QString keyValue = "/" + __keyRoot + "/" + __keyValue;
    QString value = configIniRead->value(keyValue).toString();
    delete configIniRead;
    return value;
}

// 写入配置文件
void MainWindow::writeConfigIniForInt(QString __keyRoot, QString __keyValue, int value)
{
    QSettings *configIniWrite = new QSettings(CONFIG_INI_NAME, QSettings::IniFormat);
    if (__keyRoot.isNull() || __keyValue.isNull()) {
        delete configIniWrite;
        return;
    }
    QString keyValue = "/" + __keyRoot + "/" + __keyValue;
    configIniWrite->setValue(keyValue, value);
    delete configIniWrite;
}

运行结果将生成一个名为Config.ini的文件,并且能够读取到INI文件中存储的参数值为100。

如果现在提出一个新的需求,要求修改上述接口以实现任意类型参数的写入,使用重载机制还是模板来实现更合适?这个问题留给读者自行思考。