Qt 如何在QML中对行为进行子类化

Qt 如何在QML中对行为进行子类化,qt,qml,Qt,Qml,我在屏幕上有许多对象,我更改了它们的不透明度,为了使不透明度更改成为动画而不是即时的,我将此行为添加到每个对象中: Behavior on opacity { NumberAnimation { duration: 500 easing.type: Easing.InOutQuad } } 我试图将其子类化(不确定这里的“子类”是否正确)。我创建了一个名为FadeBehavior.qml的文件,其中包含以下内容: import QtQuick 2

我在屏幕上有许多对象,我更改了它们的不透明度,为了使不透明度更改成为动画而不是即时的,我将此
行为添加到每个对象中:

Behavior on opacity {
    NumberAnimation {
        duration: 500
        easing.type: Easing.InOutQuad
    }
}
我试图将其子类化(不确定这里的“子类”是否正确)。我创建了一个名为
FadeBehavior.qml
的文件,其中包含以下内容:

import QtQuick 2.3
import QtQuick.Controls 1.3 as Controls

Behavior on opacity {

    id: fadeBehavior

    NumberAnimation {
        duration: 500
        easing.type: Easing.InOutQuad
    }

}
然后,我不再向每个对象添加
行为
,而是添加:

FadeBehavior { }
但这不起作用(很抱歉,我不能添加比“不起作用”更多的信息-这是一个继承的应用程序,我无法在调试模式下运行它;当我在QML文件中出错时,所发生的一切就是我的窗口显示为一个空白的一英寸正方形)


第一行中不透明度上的
似乎是Qt不喜欢的部分。在
FadeBehavior.qml
中,不透明度上的
以红色下划线,应为标记
{
。是否有其他语法用于指定
行为所附加到的属性的名称?

以下是一个可行的解决方法

将您需要的所有标准类型(
矩形
图像
,等等)进行子类化,如下所示

Item {
    Behavior on opacity {
        NumberAnimation {
            duration: 500
            easing.type: Easing.InOutQuad
        }
    }
}

将其另存为MyItem.qml,并将每个
项目更改为
MyItem

以下是一个可行的解决方法

将您需要的所有标准类型(
矩形
图像
,等等)进行子类化,如下所示

Item {
    Behavior on opacity {
        NumberAnimation {
            duration: 500
            easing.type: Easing.InOutQuad
        }
    }
}

将其另存为MyItem.qml,并将每个
项目更改为
MyItem

您不能真正做到这一点,
行为
是一种“特殊”行为QML元素,甚至它的语法都是QML语言范例中的一个例外。我个人不喜欢这样,尤其是缺少一种指定目标的替代方法,我发现这在很多情况下都非常有限。你不能真正做到这一点,
行为
是一种“特殊的”QML元素,甚至它的语法在QML语言范例中都是一个例外。我个人不喜欢这样,尤其是缺少一种指定目标的替代方法,我发现这在很多情况下都非常有限。