在QML中创建波纹按钮效果可以通过使用MouseArea和ShaderEffect实现。下面是一个示例代码:
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtGraphicalEffects 1.15
Button {
id: rippleButton
width: 100
height: 40
text: "Ripple Button"
contentItem: Item {
width: parent.width
height: parent.height
Rectangle {
id: rippleRect
width: parent.width
height: parent.height
color: "#007bff"
radius: 5
MouseArea {
id: rippleArea
anchors.fill: parent
hoverEnabled: true
onPressed: {
rippleEffect.target = rippleRect
rippleEffect.start()
}
onReleased: {
rippleEffect.stop()
}
onPositionChanged: {
rippleEffect.targetX = mouse.x
rippleEffect.targetY = mouse.y
}
}
ShaderEffect {
id: rippleEffect
property real targetX: 0
property real targetY: 0
property real progress: 0
property real radius: 0
fragmentShader: "
uniform lowp float qt_Opacity;
uniform highp float radius;
uniform highp float progress;
uniform highp vec2 target;
void main() {
highp vec2 pos = qt_TexCoord0.st;
highp float dist = distance(pos, target);
highp float alpha = smoothstep(radius - progress, radius + progress, dist);
gl_FragColor = vec4(1.0, 1.0, 1.0, alpha * qt_Opacity);
}
"
onProgressChanged: {
rippleEffect.radius = Math.max(rippleRect.width, rippleRect.height) * progress
}
NumberAnimation {
id: rippleAnimation
target: rippleEffect
property: "progress"
duration: 500
easing.type: Easing.OutQuad
}
}
}
}
}
这段代码创建了一个波纹按钮效果。当鼠标按下按钮时,会在按钮上创建一个波纹效果,波纹的中心点会跟随鼠标位置移动。当释放鼠标时,波纹效果消失。
这个效果通过使用MouseArea捕捉鼠标事件,并根据鼠标位置更新波纹的中心点。ShaderEffect用于创建波纹的视觉效果,使用fragmentShader来计算波纹的透明度。
这只是一个简单的示例,你可以根据自己的需求进行修改和扩展。如果你想了解更多关于QML的信息,可以参考腾讯云的QML开发文档:QML开发文档
领取专属 10元无门槛券
手把手带您无忧上云