在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属性!!!