我在运行时不断获取应用程序的数据,但是一旦我读完数据并将其存储在地图中,我就会遇到一些问题.
当我尝试在QML中显示数据时,它只显示零,尽管我可以在应用程序输出中看到它更新.
我使用属性绑定访问QML中的值(我的印象是这些导致headingSensor每次carData.headingSensor更改时都会更新?):
property int headingSensor: carData.headingSensor
Text { text: "Heading: " + headingSensor }
Run Code Online (Sandbox Code Playgroud)
在我的数据类中,我有:
Q_PROPERTY(int headingSensor READ getHeadingSensor NOTIFY headingSensorChanged)
int headingSensor;
Run Code Online (Sandbox Code Playgroud)
在我最初的c ++实现中:
int data::getHeadingSensor(){
return data.value(heading)[headingSensorReading];
}
Run Code Online (Sandbox Code Playgroud)
它返回正在使用传入信息更新的地图中的值.
我意识到这可能不起作用,因为该属性依赖于headingSensor变量,尽管返回了正确的值,但该变量本身并未更新.所以,我想如果我更改它以更新headingSensor值并返回它可能会起作用.
所以在我的数据采集逻辑中,我写了一个方法来更新变量.
data.insert(key, value);
updateVariables();
}
}
}
void data::updateVariables(){
headingSensor = data.value(heading)[headingSensorReading];
}
int data::getHeadingSensor(){
return headingSensor;
}
Run Code Online (Sandbox Code Playgroud)
虽然这导致headingSensor除了地图中的值之外更新变量,但QML显示中仍未显示正确的值.它只显示0(最初显示时的默认值,因为它尚未从传入数据中获取值).
所以,我想知道,如何将QML中显示的sensorHeading的值更新为它的值和/或地图中的值在C++中更改?我是否需要做以下事情:
Connections {
target: carData
onSensorHeadingChanged: updateValues
}
Run Code Online (Sandbox Code Playgroud)
编辑:尝试这样的东西,onSensorHeadingChanged永远不会激发.我不知道为什么,因为我在应用程序输出中看到它时,sensorHeading的值明显改变
Connections{
target: carData
onHeadingSensorChanged: console.log("It's noting the change!")
}
Run Code Online (Sandbox Code Playgroud)