Qt Quick 3D - Robot Arm Example

 // Copyright (C) 2022 The Qt Company Ltd.
 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

 #include "animatedparam.h"

 #include <QVariantAnimation>

 AnimatedParam::AnimatedParam(QObject *parent) : QVariantAnimation(parent)
 {
     setDuration(1500);
     setEasingCurve(QEasingCurve::InOutCubic);

     connect(this, &QVariantAnimation::valueChanged, this, &AnimatedParam::valueChanged);
     connect(this, &QAbstractAnimation::stateChanged, this, [this](QAbstractAnimation::State newState, QAbstractAnimation::State oldState) {
         m_isRunning = (newState == QAbstractAnimation::Running);
     });
 }

 int AnimatedParam::value() const
 {
     return currentValue().toInt();
 }

 void AnimatedParam::setValue(int newValue)
 {
     stop();
     setStartValue(value());
     setEndValue(newValue);
     start();
 }

 bool AnimatedParam::isRunning() const
 {
     return m_isRunning;
 }