非列表属性

不能将多个对象赋值给默认非列表属性

发生了什么?

默认属性有多个绑定,但默认属性类型不是列表类型,只期望一个绑定。

为什么这样不好?

除了最后一个绑定,默认属性的所有绑定都将被忽略。这很可能表明默认属性应该是一个列表,或者有太多绑定到同一个属性。

示例

让我们声明一个组件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
    }
}

© 2024 Qt公司有限公司。本文件中包含的文档贡献的版权归其各自的所有者。提供的文档根据由自由软件基金会发布的GNU自由文档许可版本1.3的条款进行许可。Qt以及相应的标志是芬兰和/或世界其他地区Qt公司有限公司的商标。所有其他商标均为其各自所有者的财产。