私はこのことについて周りを回っています。信号とスロットの周りに頭を包むことはできません。カスケードと信号/スロット
C++のシグナルが発生したときに自動的にUIを更新できるメカニズムを探しています。
例:値を返します_app.method:
私はテキストを持っているQMLで2つのラベルを持っています。
私は、onClickedがQ_INVOKABLEメソッドを実行するボタンを持っています。このメソッドは、完了したときに信号を送出します。たとえば、地理座標を取得し、上のテキスト:代入が依存する値を更新します。
私が望むのは、それらの値が変更されると、テキスト:割り当てを更新することです。
これらの信号/スロットは簡単に説明するだけです。ドキュメントの唯一の例は、QMLまたはC++のみを想定していますが、両方の組み合わせは想定していません。サンプルコードには例がありますが、具体的には説明されていません。
わかりやすい説明があれば、私はそれに適応できると確信しています。例えば、1:これをQMLで定義する、2:これをhppファイルで定義する、3:これらをcppファイルで定義する。
私はQObjectのsetPropery( "text"、 "value")を使用しようとしましたが、これを試みるときに私のアプリケーションがクラッシュします。
私が間違っている場合を教えてください...
1)QMLで:
Button {
id: aButton
text: _app.value
onClicked: {
_app.valueChanged.connect(aButton.onValueChanged);
_app.value = _app.value + 1;
}
function onValueChanged (val) {
aButton.text = "New value: " + val;
}
}
2)HPP中:
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
public:
int value();
void setValue(int i);
signals:
void valueChanged(int);
private:
int m_iValue;
3)CPP中:
int class::value()
{
return m_iValue;
}
void class::setValue(int i)
{
// name is same as HPP WRITE Q_PROPERTY statement
m_iValue = i;
emit valueChanged(m_iValue);
}
QMLでは、onClickメソッドのCONNECT QML関数を用いた信号。つまり、今では価値の変化を聴いています。そうすると、その関数が呼び出されます。次に、値を変更します... Q_PROPERTYが書き込み値をsetValueという関数に設定するため、setValueが新しい値で呼び出されます。内部的には、m_iValueが変更され、emitが発生し、valueChangedをリッスンしている誰かに新しい値があることが伝えられます。
こんにちは、私のQMLはそれを聞いています! (_app.valueChanged.connectスクリプトを介して)。それで、QMLオブジェクト(Button)は、それを聞いていましたが、新しい値(valueChanged(m_iValue)を放出したため)が呼び出されたonValueChanged関数があります。 !?!
うわー...どういうわけか、シグナル/スロットマジックのおかげでうまくいきます。 この作品を作る特別なキーワードはありますか? –
私が認識していることはありません –