非列表属性
此警告类别由 qmllint 拼写[non-list-property]
。
无法为默认非列表属性分配多个对象
发生了什么事?
默认属性有多个绑定对象,但默认属性类型不是列表类型,只期望一个绑定对象。
为什么会这样?
除了最后一个绑定外,默认属性的所有绑定都将被忽略。这很可能暗示默认属性应该是一个列表,或者同一属性有太多绑定。
示例
让我们声明一个组件MyComponent
,它有一个默认的非列表属性,然后让我们绑定三个项目到该默认属性:
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" } }
要修复此警告,请用列表替换默认属性:
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 } }
要修复此警告,请删除所有不需要的绑定,以防默认属性不应该是列表:
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 } }
© 2025 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.