QML动画的另一个时间来源?

弗拉德

我正在考虑构建一个gstreamer插件,该插件可以呈现动画QML图形,以便以后覆盖到播放的视频上。到目前为止,除一个问题外,使用QML的想法对我来说非常有前途。我需要能够在视频中进行搜索,并且动画还必须倒带并跳到所需的时间点。现在,我阅读了QML文档,我看到所有动画通常都是有时间限制的。

因此,我的问题是:是否可以将QML动画绑定到某些“时间源”,而不是现实世界的时间,这可能不是单调的(实际上,它可以由应用程序操纵)。或者,更笼统地说,我可以将QML动画绑定到数值X上,以便当它更改时,我的动画继续进行,并且X与动画状态之间存在严格的关系。希望您能明白。

菲利普·哈祖斯基(Filip Hazubski)

该答案仅适用于NumberAnimation对象。可能也可以使用类似的方法来替换其他Animation对象。

ddriver所述,除了解决方法外,没有其他方法。

这是我解决问题的方法。它可能看起来很复杂,但是我可以保证它易于使用。在此答案的末尾,我使用该代码链接到示例项目的源代码。你可以尝试一下。

将这些文件添加到您的项目中:

  • easingvalueforprogress.h

#ifndef EASINGVALUEFORPROGRESS_H
#define EASINGVALUEFORPROGRESS_H

#include <QObject>
#include <QEasingCurve>

class EasingValueForProgress : public QObject
{
    Q_OBJECT
public:
    explicit EasingValueForProgress(QObject *parent = 0);

    Q_INVOKABLE double getValue(int easingEnum, double progress){
        QEasingCurve easing((QEasingCurve::Type)easingEnum);
        return easing.valueForProgress(progress);
    }

signals:

public slots:
};

#endif // EASINGVALUEFORPROGRESS_H
  • easingvalueforprogress.cpp

#include "easingvalueforprogress.h"

EasingValueForProgress::EasingValueForProgress(QObject *parent) : QObject(parent)
{

}
  • XValueAnimation.qml

import QtQuick 2.0

Item {
    id: xValueAnimator

    property Item target
    property string targetProperty
    property double from
    property double to
    property int easing: Easing.Linear
    property double xValue

    onXValueChanged: {
        if (target.hasOwnProperty(targetProperty)) {
            target[targetProperty] = calculateCurrentValue(
                        from, to, easing, xValue);
        }
        else
            console.error("XValueAnimator: target:", target,
                          "does not have property", targetProperty)
    }

    function calculateCurrentValue(
        defaultFrom, defaultTo, animationEasing, xValue) {

        return defaultFrom + (defaultTo - defaultFrom)
                * easingValueForProgress.getValue(animationEasing, xValue)
    }
}

将此添加到您的main.cpp中:

#include <QQmlContext>
#include "easingvalueforprogress.h"

    EasingValueForProgress easingValueForProgress;
    engine.rootContext()->setContextProperty(
                "easingValueForProgress", &easingValueForProgress);

现在您可以像这样使用它(而不是NumberAnimation对象):

XValueAnimator {
    target: object_you_want_to_affect     // for example id of the object
    targetProperty: "property_to_affect"  // for example "x"
    from: 100
    to: 500
    easing: Easing.OutQuad                // omit to use Easing.Linear
    xValue: myXValue                      // your property holding values from 0 to 1
}


在这里,我提供了工作示例项目。随时下载和测试。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

条件格式(如果一个时间大于另一个时间)

来自分类Dev

检查一个时间范围是否进入另一个时间范围

来自分类Dev

将一个时间范围缩小到另一个时间范围的算法

来自分类Dev

在熊猫中将一个时间序列插值到另一个

来自分类Dev

从两个日期时间之间的时差返回另一个时间

来自分类Dev

比较时间戳和另一个时间戳对象

来自分类Dev

如何在PLSQL中检查时间是否大于或小于另一个时间

来自分类Dev

如何在C#中从另一个时间中减去时间?

来自分类Dev

如何在PLSQL中检查时间是否大于或小于另一个时间

来自分类Dev

提取时间并比较是否大于另一个时间

来自分类Dev

用另一个时间序列更新时间序列

来自分类Dev

在另一个时间之前/之后寻找最近的时间

来自分类Dev

输入多个时间范围然后返回所有另一个时间范围

来自分类Dev

如何从python中的时间列中删除一个时间点到另一个时间点的时间戳

来自分类Dev

检查日期是否在另一个时间段中已经存在

来自分类Dev

根据另一个时间序列找出熊猫序列中值的差异

来自分类Dev

另一个时间复杂度问题

来自分类Dev

检查日期是否在另一个时间段中已经存在

来自分类Dev

Python中是否有一种方法可以计算一个时间占另一个时间的百分比?

来自分类Dev

ANSI DATETIME上的无效操作(在Teradata中将一个时间戳减去另一个时间戳)

来自分类Dev

如何使用Promql获取不在另一个时间序列中的一个时间序列的数据点?

来自分类Dev

检查一个时间段是否包含在另一个时间段中

来自分类Dev

Google Spreadsheet Makro-将一个时间值添加到另一个

来自分类Dev

比较时间:检查给定时间是否在另一个时间范围内

来自分类Dev

比较时间:检查给定时间是否在另一个时间范围内

来自分类Dev

如何删除行,当时间戳与另一个时间戳完全一样

来自分类Dev

将时间跨度添加到另一个时间跨度不起作用

来自分类Dev

将时间序列数据映射/采样到另一个时间序列 db2

来自分类Dev

Map.getValue() 在某个时间返回一个 List,另一个时间返回一个 Object

Related 相关文章

  1. 1

    条件格式(如果一个时间大于另一个时间)

  2. 2

    检查一个时间范围是否进入另一个时间范围

  3. 3

    将一个时间范围缩小到另一个时间范围的算法

  4. 4

    在熊猫中将一个时间序列插值到另一个

  5. 5

    从两个日期时间之间的时差返回另一个时间

  6. 6

    比较时间戳和另一个时间戳对象

  7. 7

    如何在PLSQL中检查时间是否大于或小于另一个时间

  8. 8

    如何在C#中从另一个时间中减去时间?

  9. 9

    如何在PLSQL中检查时间是否大于或小于另一个时间

  10. 10

    提取时间并比较是否大于另一个时间

  11. 11

    用另一个时间序列更新时间序列

  12. 12

    在另一个时间之前/之后寻找最近的时间

  13. 13

    输入多个时间范围然后返回所有另一个时间范围

  14. 14

    如何从python中的时间列中删除一个时间点到另一个时间点的时间戳

  15. 15

    检查日期是否在另一个时间段中已经存在

  16. 16

    根据另一个时间序列找出熊猫序列中值的差异

  17. 17

    另一个时间复杂度问题

  18. 18

    检查日期是否在另一个时间段中已经存在

  19. 19

    Python中是否有一种方法可以计算一个时间占另一个时间的百分比?

  20. 20

    ANSI DATETIME上的无效操作(在Teradata中将一个时间戳减去另一个时间戳)

  21. 21

    如何使用Promql获取不在另一个时间序列中的一个时间序列的数据点?

  22. 22

    检查一个时间段是否包含在另一个时间段中

  23. 23

    Google Spreadsheet Makro-将一个时间值添加到另一个

  24. 24

    比较时间:检查给定时间是否在另一个时间范围内

  25. 25

    比较时间:检查给定时间是否在另一个时间范围内

  26. 26

    如何删除行,当时间戳与另一个时间戳完全一样

  27. 27

    将时间跨度添加到另一个时间跨度不起作用

  28. 28

    将时间序列数据映射/采样到另一个时间序列 db2

  29. 29

    Map.getValue() 在某个时间返回一个 List,另一个时间返回一个 Object

热门标签

归档