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