重复绑定

此警告类别有多个警告

属性上重复拦截器

发生了什么?

一个属性有多个拦截器

为什么这是不好的?

在同一个属性上设置多个拦截器不受 QML 引擎支持。

示例

让我们在同一属性上将Behavior作为拦截器使用两次

import QtQuick

Rectangle {
    Behavior on width {
        NumberAnimation { duration: 1000 }
    }
    Behavior on width { // not ok: Duplicate interceptor on property "width" [duplicate-property-binding]
        NumberAnimation { duration: 2000 }
    }
}

您可以通过删除所有Behavior除了一个来解决这个警告

import QtQuick

Rectangle {
    Behavior on width {
        NumberAnimation { duration: 2000 }
    }
}

有关更多信息,请参阅 属性修改器类型

属性上重复值源

发生了什么?

一个属性有多个值源

为什么这是不好的?

当组合值源时,将显示意外的行为。请参见下面的示例

示例

让我们在同一属性上将NumberAnimation作为值源使用两次

import QtQuick

Rectangle {
    NumberAnimation on x { to: 50; duration: 1000 }
    NumberAnimation on x { to: 10; duration: 100 } // not ok: Duplicate value source on property "x" [duplicate-property-binding]

    onXChanged: console.log(x)
}

如果您检查该程序的结果,您将看到两个NumberAnimation将相互交错,这可能是预期之外的效果。您可以通过删除所有NumberAnimation除了一个来解决这个警告

import QtQuick

Rectangle {
    NumberAnimation on x { to: 50; duration: 1000 }
}

无法组合值源和绑定

发生了什么?

一个属性在同一个属性上有值源和绑定。

为什么这是不好的?

绑定将在值源开始更新该属性之前更新属性的值。这可能会导致意外的行为,并更难阅读。

示例

让我们在同一属性上将NumberAnimation作为值源

import QtQuick

Rectangle {
    NumberAnimation on x { to: 50; duration: 1000 } // not ok: Cannot combine value source and binding on property "x" [duplicate-property-binding]
    x: 55

    onXChanged: console.log(x)
}

如果您检查该程序的结果,您将看到NumberAnimation将从 55 动画到 50,以下代码将更容易阅读

import QtQuick

Rectangle {
    NumberAnimation on x { from: 55; to: 50; duration: 1000 } // ok: intentions are clearer now!
}

© 2024 Qt有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档根据自由软件基金会发布的GNU 公共文档许可证版本 1.3 的条款进行许可。Qt及其相关标志是芬兰的 Qt有限公司及其它国家/地区的商标。所有其他商标均属于其各自所有者。