QML 使用Settings组件处理ini配置文件操作

在qml中,如果需要将程序中的数据保存,下次程序启动时还能接着上次的数据继续运作,那么,可以使用Settings,将数据保存为本地ini文件;

属性和函数:

在文档中,可以看到,属性只有两个,category和fileName;

  • category 表示设置当前组名;ini文件有很多个组,其中定义一个Settings就相当于一个组;
  • fileName 表示设置当前ini配置文件的路径;

函数有三个,但一般只用value;

  • setValue 表示往ini文件中新增一个值保存;(个人不推荐使用)
  • sync 表示同步,将为写入配置文件的值写入文件;这个函数从QSettings的析构函数中自动调用,并由事件循环定期调用,因此通常不需要自己调用它;(因此不需要调用)
  • value 表示读取配置文件中的某个值,参数一是键,参数二是默认值,读取失败返回默认值;

定义:

// 一个settings相当于ini中的一个组
Settings {
    id: set1
    fileName: "config.ini"      // 存储的文件路径

    // 设置配置文件的初始值
    property int age: 27
    property string name: "Jtom"
    property double weight: 65.5
    property var hobbies: [ 1, 3, 5, "basketball" ]

    // 设置组名
    category: "oneself"
}

直接在Settings组件包裹着的内部定义变量即可,变量可以赋初始值;

这些变量值就会自动写入到config.ini配置文件中,组为oneself;

注意:如果配置文件已经存在age值为25,那么程序运行起来后,age的值就是25,并不是27,27只是在配置文件没有age时定义时的初始值。(配置文件存在时会优先读取已有值而非初始值;)

如果需要另一个组存储数据,则再定义一个Settings即可:

 // 一个settings相当于ini中的一个组
Settings {
    id: set2
    fileName: "config.ini"      // 存储的文件路径

    // 设置配置文件的初始值
    property int age: 66
    property string name: "66"
    property double weight: 66.5
    property var hobbies: [ 6, 66, 666, "tennis" ]

    // 设置组名
    category: "others"
}

注意在category属性更该一下组名,不要与别的组名重名;

如何访问里面的值?

使用value函数或者直接通过id去访问:

// 访问
console.log(set1.value("age", 1))
console.log(set1.value("name", "my name is undefine."))
console.log(set1.value("weight", 60.2))
console.log(set1.value("hobbies", 0))

console.log(set1.age)
console.log(set1.name)
console.log(set1.weight)
console.log(set1.hobbies)

他们的效果是一样的。

如何修改里面的值?

直接使用id去修改即可,注意setValue没有修改效果!

// 修改
set2.age = 77
//set2.setValue("age", 77)  // 这样是修改不了的

set2.hobbies = [8, 88, 888, "8888"]

如何新增值?

如果需要新增值,不推荐使用setValue函数去新增,因为新增后,虽然可以在文件中有保存,但是下次程序启动后,无法去获取他,因为在Settings中没有定义该值;

所以,如果需要新增,建议直接在Settings中定义相应的变量即可!

// 一个settings相当于ini中的一个组
Settings {
    id: set1
    fileName: "config.ini"      // 存储的文件路径

    // 设置配置文件的初始值
    property int age: 27
    property string name: "Jtom"
    property double weight: 65.5
    property var hobbies: [ 1, 3, 5, "basketball" ]

    // 直接在此新增一个值
    property string color: "green"

    // 设置组名
    category: "oneself"
}

如何删除值?

官方文档中,好像没有介绍如何删除...

最后,建议定义Settings组件时,一定要设置fileName和category属性!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cpp_learners

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值