作者: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) // 设置编码,处理中文乱码