qt - 不使用 QML 中的简单设置调用保存数组
问题描述
我正在做一个简单的项目,需要保存运行运行的数组的值。如果我尝试使用带有整数的设置,它会在运行之间保存得很好。如果以下代码运行两次,我得到 5、15、15、25,如预期的那样。
Window {
visible: true
width: 500
height: 500
id: root
title: qsTr("Hello World")
property int mNum: 5
Rectangle {
id: bob
Component.onCompleted: {
console.log(mNum)
mNum+=10;
}
Component.onDestruction: {
console.log(mNum)
}
}
Settings {
category: "justSomeSettings1"
property alias mNumber: root.mNum
}
}
但是,如果我尝试对数组做同样的事情,我会得到意想不到的结果。对于以下代码,如果我运行 2 次,我会打印 [peach,cherry,orange]、[peach,cherry,orange,apple]、[peach,cherry,orange] 和 [peach,cherry,orange,apple]。我想知道为什么我没有得到 [peach,cherry,orange], [peach,cherry,orange,apple], [peach,cherry,orange,apple] 和 [peach,cherry,orange,apple,apple]。
Window {
visible: true
width: 500
height: 500
id: root
title: qsTr("Hello World")
property var mArr: ["peach", "cherry", "orange"]
Rectangle {
id: joe
Component.onCompleted: {
console.log(mArr);
mArr.push("apple");
}
Component.onDestruction: {
console.log(mArr);
}
}
Settings {
category: "justSomeSettings2"
property alias mArray: root.mArr
}
}
有谁知道为什么会发生这种情况或是否有任何解决方法?
解决方案
var
属性在更新时不会发出信号。因此,您的 Settings 对象永远不会发现值已更改。不过,您可以手动发出信号。所以你可以这样做:
mArr.push("apple");
mArrChanged();
推荐阅读
- shell - AWK,比较两个文件,然后比较匹配的另一个字段并进行算术运算
- javascript - 如何在 highcharts 多个向下钻取上添加滚动
- javascript - 为什么将 Buefy 导入我的 Vuejs 项目会使
- excel - 有没有办法使用 Google appscript 从 Bigquery 结果生成 Microsft Excel?
- python - kivy中的登录界面
- php - 如果条件允许,则创建视图表
- php - 根据当前会话选择计数联合
- go - 结构片不能插入golang中的接口片
- cucumber - 如何在黄瓜步骤定义中实现httpAuth
- jmeter - 未找到密钥库文件,正在加载空密钥库