Qt使用QSettings读写ini文件

作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

QSettings 简介

QSettings 类提供了ini文件读写,注册表读写的功能
QSettings::Format有两种:

  • QSettings::NativeFormat 在windows平台可以读写windows注册表
  • QSettings::IniFormat 可以读写ini格式的配置文件

示例

#include <QSettings>
#include <QDebug>

struct Student {
    Student() {}
    Student(QString name, int age) : name(name), age(age) {}
    
    QString name;
    int age;

    void print() {
        qDebug() << "name: " << name << ", age: " << age;
    }
};

int main(int argc, char *argv[])
{
    QSettings settings("config.ini", QSettings::IniFormat);
    QString name = QString("student") + "/" + "name";
    QString age = QString("student") + "/" + "age";
    
    settings.setValue(name, "billy");
    settings.setValue(age, "18");
    
    qDebug() << "name: " << settings.value(name, "").toString();
    qDebug() << "age: " << settings.value(age, "").toString();

    //-------------------------------------------------
    
    QList<Student> stu_list;
    stu_list.push_back(Student("Billy", 18));
    stu_list.push_back(Student("Kitty", 16));
    stu_list.push_back(Student("Alice", 17));
    stu_list.push_back(Student("Ben", 17));
    stu_list.push_back(Student("Miss", 18));
    
    settings.beginWriteArray("studentList");
    for ( int i = 0; i < stu_list.size(); ++i ) {
        settings.setArrayIndex(i);
        settings.setValue("name", stu_list.at(i).name);
        settings.setValue("age", stu_list.at(i).age);
    }
    settings.endArray();
    
    QList<Student> ret_list;
    int size = settings.beginReadArray("studentList");
    for (int i = 0; i < size; ++i) {
        settings.setArrayIndex(i);
        Student stu;
        stu.name = settings.value("name").toString();
        stu.age = settings.value("age").toInt();
        ret_list.append(stu);
    }
    settings.endArray();
    
    for ( auto &temp : ret_list )
    {
        temp.print();
    }
    
    return 0;
}

运行输出:
name:  "billy"
age:  "18"
name:  "Billy" , age:  18
name:  "Kitty" , age:  16
name:  "Alice" , age:  17
name:  "Ben" , age:  17
name:  "Miss" , age:  18

在这里插入图片描述

其他常用方法

  • QStringList QSettings::allKeys() const // 获取所有的key
  • bool QSettings::contains(const QString &key) const // 判断key是否存在
  • void QSettings::remove(const QString &key) // 移除key
  • void QSettings::setIniCodec(QTextCodec *codec) // 设置编码,处理中文乱码

猜你喜欢

转载自blog.csdn.net/qq_34139994/article/details/107614143