4

アプリケーションの実行中に継続的にデータを取得していますが、データを読み込んでマップに保存すると、データを表示するのに少し問題があります。

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!")
}
4

1 に答える 1

8

headingSensorChanged()バインディングを更新させるために発行するのは、C++ 要素ライターの責任です。

このチュートリアルは、C++ 要素を実装するときに開始するのに適しています。

あなたの場合、次のようなことをする必要があります:

void data::updateVariables(){
    int sensorReading = data.value(heading)[headingSensorReading];
    if (headingSensor != sensorReading) {
        headingSensor = sensorReading;
        emit headingSensorChanged();
    }
}

実際に変更がない限り、変更通知を発行しないことに注意してください。これにより、不要な JS 評価が回避され、バインド ループの可能性も排除されます。

于 2012-07-19T21:52:50.027 に答える