import QtQuick 2.3 import QtQuick.Controls 2.4 import QtQuick.Controls.Styles 1.2 BusyIndicator { id: control property double animationSpeed: 0.5 contentItem: Item { implicitWidth: 64 implicitHeight: 64 Item { id: item x: parent.width / 2 - 32 y: parent.height / 2 - 32 width: 64 height: 64 opacity: control.running ? 1 : 0 property int currentHeight: 0 onCurrentHeightChanged: { } Behavior on opacity { OpacityAnimator { duration: 250 } } SequentialAnimation { loops: Animation.Infinite running: true NumberAnimation { target: item duration: 2000 * 1/control.animationSpeed to: 1000 properties: "currentHeight" easing.type: Easing.InOutQuad } NumberAnimation { target: item duration: 2000 * 1/control.animationSpeed to: 0 properties: "currentHeight" easing.type: Easing.InOutQuad } } Row { anchors.fill: parent spacing: item.width / 9 Repeater { id: repeater model: 5 Rectangle { property double heightMultiplier: Math.abs( Math.sin(( (item.currentHeight + (index*20))*0.01) * (Math.PI/2) ) ) anchors.verticalCenter: parent.verticalCenter width: item.width / 9 height: ( heightMultiplier ) * ( item.height - 1 ) + 1 radius: width * 0.5 color: "#21be2b" } } } } } }