Duplicate bindings

This warning category is spelled c{[duplicate-property-binding]} by qmllint.

Duplicate interceptor on property

What happened?

One property has multiple interceptors.

Why is this bad?

Setting multiple interceptors on the same property is unsupported by the QML engine.

Example

Lets use Behavior as interceptor twice on the same property:

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 }
    }
}

To fix this warning, remove all but one Behavior:

import QtQuick

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

See also Property Modifier Types.

Duplicate value source on property

What happened?

One property has multiple value sources.

Why is this bad?

The value sources will show unexpected behavior when combined. See example below.

Example

Lets use NumberAnimation as value source twice on the same property:

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)
}

If you check the output of that program, you will see that the two NumberAnimation will interleave each other, which is probably not the effect that was intended. To fix this warning, remove all but one NumberAnimation:

import QtQuick

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

Cannot combine value source and binding

What happened?

One property has a value source and a binding on the same property.

Why is this bad?

The binding will updated the property value before the value source starts updating this property. This may lead to unexpected behavior, and is also harder to read.

Example

Lets use NumberAnimation as value source on the same property:

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)
}

If you check the output of that program, you will see that the NumberAnimation will animate from 55 to 50, which would be easier to read with following code:

import QtQuick

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

© 2024 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.