Non-List Property

Cannot Assign Multiple Objects To A Default Non-List Property

What happened?

A default property has multiple bindings but the default property type is not a list type and only expects one binding.

Why is this bad?

All the bindings to the default property, except the last one, will be ignored. This most likely hints that the default property should instead be a list, or that there are too many bindings to the same property.

Example

Let's declare a component MyComponent that has one default non-list property, and then lets bind three items to that default property:

 import QtQuick

 Item {
     component MyComponent: QtObject {
         default property Item helloWorld
     }
     MyComponent {
         // first item bound to default property:
         Item { objectName: "first" } // will warn: Cannot assign multiple objects to a default non-list property [non-list-property]
         // second item bound to default property:
         Item { objectName: "second" } // not ok: default property was bound already
         // third item bound to default property:
         Item { objectName: "third" } // not ok: default property was bound already

         Component.onCompleted: console.log(helloWorld.objectName) // prints "third"
     }
 }

You can fix this warning by replacing the default property by a list:

 import QtQuick

 Item {
     component MyComponent: QtObject {
         default property list<Item> helloWorld
     }
     MyComponent {
         // first item bound to default property:
         Item { objectName: "first" } // ok: binding a first item to the list
         // second item bound to default property:
         Item { objectName: "second" } // ok: binding a second item to the list
         // third item bound to default property:
         Item { objectName: "third" } // ok: binding a third item to the list
     }
 }

You can also fix this warning by removing all the unwanted bindings, in case the default property is not supposed to be a list:

 import QtQuick

 Item {
     component MyComponent: QtObject {
         default property Item helloWorld
     }
     MyComponent {
         Item { objectName: "first" } // ok: just one item bound to default property
     }
     MyComponent {
         Item { objectName: "second" } // ok: just one item bound to default property
     }
     MyComponent {
         Item { objectName: "third" } // ok: just one item bound to default property
     }
 }