必需属性无法与转发器一起使用

时间:2020-06-20 09:35:35

标签: qt qml

我有一个像这样的组件:

import QtQuick 2.15

Item {
    id: root

    property double value: 0.0

    property int core: 1

    property color progressBarColor: "black"
    property color minMaxTextColor: "black"
    property int fontSize: height - 6

//....
}

现在,我认为最好是需要一些属性,因为在使用组件时应声明它们。所以我改为:

import QtQuick 2.15

Item {
    id: root

    required property double value

    required property int core

    property color progressBarColor: "black"
    property color minMaxTextColor: "black"
    property int fontSize: height - 6

//....
}

该组件在中继器中被调用,如下所示:

SystemInformation{
    id: sysinfo
}

Column{
    id: displayColumn


    Repeater{
        model: sysinfo.coreUtilizationsInPercent.length

        CoreUtilizationDisplay{
            width: root.elementWidth
            height: root.elementHeight
            fontSize: root.fontSize

            progressBarColor: "#3399FF" // blue
            minMaxTextColor: "blue"

            core: index + 1
            value: sysinfo.coreUtilizationsInPercent[index]
        }
    }
}

现在,在我完成所需的属性之前,它可以正常工作。我不知道为什么它不起作用?

如果我声明需要它,则会出现此错误:

qrc:/qml/SystemInformationDisplay.qml:57: ReferenceError: index is not defined

我对中继器中没有的类似组件执行了相同的操作,并且在那里工作正常。

为什么?

1 个答案:

答案 0 :(得分:2)

从qt develop blog

如果您的代表不包含必需的属性,则此处没有任何变化。但是,如果它们至少包含一个必需的属性,则将无法再访问这些名称。相反,您必须通过将它们指定为必需属性来明确选择加入。

在这种情况下,您需要将所需的属性索引添加到组件中。

import QtQuick 2.15

Item {
    id: root

    required property double value
    required property int core

    required property int index // add it 

    property color progressBarColor: "black"
    property color minMaxTextColor: "black"
    property int fontSize: height - 6

//....
}

使用此附加索引,您可以构建组件并访问索引。您无需指定索引。完成,因为它是委托。

Repeater{
    model: sysinfo.coreUtilizationsInPercent.length

    delegate: CoreUtilizationDisplay{
        width: root.elementWidth
        height: root.elementHeight
        fontSize: root.fontSize

        progressBarColor: "#3399FF" // blue
        minMaxTextColor: "blue"

        core: index + 1
        value: sysinfo.coreUtilizationsInPercent[index]
    }
}

更多信息,请参见documentation