Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 必需的属性不能与中继器一起工作_Qt_Qml - Fatal编程技术网

Qt 必需的属性不能与中继器一起工作

Qt 必需的属性不能与中继器一起工作,qt,qml,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: heig

我有这样一个组件:

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
我对中继器中没有的类似组件也做了同样的操作,在那里它工作得很好

为什么?

来自qt

如果您的委托不包含必需的属性,则此处不会发生任何更改。但是,如果它们至少包含一个必需的属性,则这些名称将不再可访问。相反,您必须通过将它们指定为必需属性来显式地选择加入

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

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

更多信息可在

委托:CoreUtilitizationDisplay
为什么委托?所有其他功能都在没有它的情况下工作。因为索引在delegated中工作,即使添加了delegate,只要我声明属性,仍然会出现错误required@Sandro4912我认为这是一个错误,报告它。代表是不相关的,因为在复读者的情况下,代表是对迟到的回答表示感谢。我从来没有想到,在我遇到同一个问题的今天,你必须明确地添加
索引。我认为这种行为是不直观的。