アプリケーションの実行中に継続的にデータを取得していますが、データを読み込んでマップに保存すると、データを表示するのに少し問題があります。
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!")
}