小编use*_*920的帖子

属性绑定不更新

我在运行时不断获取应用程序的数据,但是一旦我读完数据并将其存储在地图中,我就会遇到一些问题.

当我尝试在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)

binding qt qml qtcpsocket qtquick2

3
推荐指数
1
解决办法
5765
查看次数

标签 统计

binding ×1

qml ×1

qt ×1

qtcpsocket ×1

qtquick2 ×1