2017-01-03 6 views
0

私はC++とQMLを使用するアプリケーションを持っています。私のC++では C++の値が変更されたときにアニメーションqmlをトリガする方法は?

:私は を読んで、私はスライダーでそれを示すためにQMLに送信します。 私の 私のハードウェアを押すと変更されます。

私の問題はQMLの一部である:QMLで

は、私が数秒この変更のためのアニメーションをトリガーする必要があります。私はこのアニメーションを表示する必要があるのは、C++の部分の値が変更されたときです。

誰かが助けてもらえますか?

QMLタイマーを試しましたが、値が変更されたときにアニメーションが表示されませんでしたか?

アニメーションのQMLの部分でいくつかのコード:

VolumeRemote.QML

Rectangle { 
id: item1 
width: 550 
height: 110 
color: "#0a0a07" 
border.color: "#ffffff" 
opacity: 1 


SliderComponent{ 
    id:slider 
    x: 34 
    y: 79 
    width: 466 
    height: 5 
    minimumValue: 0 
    //here i give the value from C++ to my slider 
    //Controller is a global Qobject where i define some stuff 
    value: Controller.volume_radio 
    onValueChanged: { 
    animation.running=true; 

} 

PropertyAnimation { 
       id:myanimation 
       running: true     
       target:item1     
       property: 'visible' 
       to: false      
       duration: 10000 
       } 
     } 

Text { 
    id: text1 
    x: 93 
    y: 16 
    width: 170 
    height: 41 
    color: "#ffffff" 
    text: qsTr("Radio Volume :") 
    verticalAlignment: Text.AlignVCenter 
    horizontalAlignment: Text.AlignHCenter 
    font.pixelSize: 24 
    font.family: regular.name 
} 

Text { 
    id: valeurslider 
    x: 277 
    y: 16 
    // x: 618 
    //y: 45 
    width: 24 
    height: 41 
    color: "#ffffff" 
    text: slider.value 
    verticalAlignment: Text.AlignVCenter 
    horizontalAlignment: Text.AlignHCenter 
    opacity: 0.45 
    font.pixelSize: 30 
    font.family: regular.name 
} 

Image { 
    id: image1 
    x: 34 
    y: 16 
    width: 44 
    height: 41 
    source: "assets/ic_sound_popup_on.png" 
} 

}

+0

どのように変数をQMLに渡しましたか?通常、C++からQMLに渡されるプロパティは通知できません。 – folibis

+0

CMLでトリガするカスタム信号を定義し、それをQML-Sideで処理してアニメーションを開始することができます。 – derM

+0

私はこれをC++の部分で使用して値を通知します:Q_PROPERTY(int RadioVolume READvalvalTITY val_signal) –

答えて

0

私は@Beloquiと@KevinKrammarの二番目の答えを使用します:

1 - Deプロパティを持つ簡単なアニメーションを表示するを表示する

2 - SliderCompenentと値を与える:コントローラ。volume_radio

3 - ++ Cから通知信号を取得するために、接続の使用:OnVolumesignal

それから信号はC++ここ一部

小片から出射されたアニメーションをトリガすることができコード:

import QtQuick 2.0 
import QtQuick 2.0 
import Controllers 1.0 
import "Logic.js" as Controller_Js 

    Rectangle { 
    id: item1 
    width: 550 
    height: 110 
    color: "#0a0a07" 
    border.color: "#ffffff" 
    opacity: 1 
    visible: Controller.stateVol 

SliderComponent{ 
    id:slider 
    x: 34 
    y: 79 
    width: 466 
    height: 5 
    minimumValue: 0 
    maximumValue: 100 
    value: Controller.volume_radio 
    NumberAnimation { 
    id: animation 
    target: item1 
    property: "visible" 
    duration: 1000 
    easing.type: Easing.InOutQuad 
} 

//gestion du signal 
Connections{ 
    target:commodo 
    onVolumesignal:{ 
     if (commodo.RadioVolume !==100){ 
      Controller.stateVol=true 
      animation.start(); 
      console.log("state of controller :", Controller.stateVol) 
     } else if (commodo.RadioVolume>100){ 
      animation.stop(); 
      Controller.stateVol=false 
      console.log("state", Controller.stateVol) 
     } 
     } 
    } 

Cobntroller.stateVolは私のcontroller.qmlでfalseに定義されています

ありがとう、本当に助けてくれました。

0

あなたがC++の部分でこれを使用する場合:Q_PROPERTY(RadioVolumeを読むval_signal NOTIFY GETVAL INT) RadioVolumeを変更するには、書き込み関数を追加する必要があります。つまり、 Q_PROPERTY(int RadioVolume READ getval WRITE setVal NOTIFY val_signal)、関数setVal()でRadioValume変数の値を変更する必要があり、値が変更されるたびにval_signalを発行する必要があります。値を直接設定するのではなく、RadioVolumeの値を設定するたびにsetVal()関数を呼び出してから、QMLの部分にこれを置く必要があります。onVal_Signal:ここにアニメーションを入れてください 私の答えに関する質問があれば、聞く、質問する。あなたは、コードを持っている場合、私はあなたの2つのオプション

地元の財産とその変化信号

readonly property qreal valueFromCpp: Controller.volume_radio 
onValueFromCppChanged: // trigger animation 

接続要素を持ってそれを

+0

ありがとう@JBerloqui、私は問題の最初の部分を解決し、値の変更。私はQMLの部分でいくつかのコードを編集します。 2つ目の問題は、値が変化したときに数秒間だけアニメーションをトリガして消滅させる方法です。 –

+0

私はその部分を手伝うことができるようにいくつかのコードを投稿できますか? – JBeloqui

+0

私はあなたに尋ねる前にコードを追加したことがわかります!申し訳ありません、私はそれを読んで答えを与える – JBeloqui

1

を変える手助けするために喜んでいるでしょう

Connections { 
    target: Controller 
    onNameOfThePropertyNotifySignal: // trigger animation 
} 
+0

宣言的なController.onVolume_radioChanged {}要素が動作しない理由は何ですか?コントローラーは他のプロパティーバインディングで正常に動作していても見つかりません。 –

関連する問題