我有一个使用C ++和QML的应用程序。
在我的C ++中:我读了 值 并将其发送到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 :(得分:1)
您有两个选择
本地财产及其变更信号
readonly property qreal valueFromCpp: Controller.volume_radio
onValueFromCppChanged: // trigger animation
一个Connections元素
Connections {
target: Controller
onNameOfThePropertyNotifySignal: // trigger animation
}
答案 1 :(得分:0)
如果你在C ++部分使用它:Q_PROPERTY(int RadioVolume READ getval NOTIFY val_signal),你必须添加一个write函数来改变RadioVolume。 Tha是这样说的: Q_PROPERTY(int RadioVolume READ getval WRITE setVal NOTIFY val_signal)并且在函数setVal()中,您必须更改RadioValume变量值,并且每次值更改时都必须发出val_signal。不是直接设置值,而是每次设置RadioVolume值时调用setVal()函数,然后在QML部分中调用它: onVal_Signal:将动画放在这里 如果您对我的回答有任何疑问,请不要犹豫。如果你有代码,我很乐意帮你改变它
答案 2 :(得分:0)
我使用@Beloqui和@KevinKrammar第二个答案:
1 - 声明属性可见
的简单动画2 - SliderCompenent并给出值: Controller.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)
}
}
}
在 controller.qml 中将Cobntroller.stateVol 定义为false
谢谢大家,这对我很有帮助。