你可以使用QML中的Image
组件和动画来实现这个功能,以下是一个简单的示例代码:
import QtQuick 2.0
Item {
property bool isOn: false // 开关状态
property int blinkInterval: 500 // 闪烁间隔时间(毫秒)
Image {
id: offImage
source: "off.png"
visible: !isOn
}
Image {
id: onImage
source: "on.png"
visible: isOn
}
SequentialAnimation { // 图片闪烁动画
running: isOn
loops: Animation.Infinite
NumberAnimation {
target: onImage
property: "opacity"
from: 1.0
to: 0.0
duration: blinkInterval / 2
easing.type: Easing.InOutQuad
}
PauseAnimation {
duration: blinkInterval / 2
}
NumberAnimation {
target : offImage
property : "opacity"
from : 1.0
to : 0.0
duration : blinkInterval / 2
easing.type : Easing.InOutQuad
}
PauseAnimation {
duration : blinkInterval / 2
}
NumberAnimation {
target : onImage
property : "opacity"
from : 0.0
to : 1.0
duration : blinkInterval / 2
easing.type : Easing.InOutQuad
}
PauseAnimation {
duration : blinkInterval / 2
}
NumberAnimation {
target : offImage
property :"opacity"
from : 0.0
to : 1.0
duration : blinkInterval / 2
easing.type : Easing.InOutQuad
}
PauseAnimation {
duration : blinkInterval / 2
}
}
}
在上述代码中,isOn
属性表示开关状态,当其为真时闪烁动画开始播放,为假时停止;blinkInterval
属性控制闪烁间隔时间。图片的切换使用了Image
组件的visible
属性来实现。
闪烁动画使用了QML中的SequentialAnimation
组件,并且包含四个子动画,分别对应两张图片的显隐和透明度变化。其中每个子动画包含一个持续时间为半个闪烁间隔时间的渐变效果(淡出或淡入)和一个等待半个闪烁间隔时间的暂停动画。
你可以将上述代码复制到一个QML文件中,并把 off.png
, on.png
替换成自己的图标路径。然后创建一个窗口并将该Item添加到窗口即可看到效果。
内容由零声教学AI助手提供,问题来源于学员提问