【发布时间】:2012-07-18 23:37:39
【问题描述】:
我在应用程序运行时不断获取数据,但在读取数据并将其存储在地图中后,我在显示数据时遇到了一些问题。
当我尝试在 QML 中显示数据时,它只是显示为零,尽管我可以在应用程序输出中看到它正在更新。
我使用属性绑定访问 QML 中的值(我的印象是,每当 carData.headingSensor 更改时,这些都会导致 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!")
}
【问题讨论】:
标签: qt binding qml qtquick2 qtcpsocket