有没有一种方法可以将QML中内部定义的子代与外部定义的子代区别开?

问题描述 投票:0回答:1

我已经定义了MyElement元素(在MyElement.qml文件中)如下:

Rectangle {
    Item {
    }

    Component.onCompleted: {
        console.warn(children.length)
    }
}

我们将在Item中定义的MyElement元素称为内部子级。现在,我通过以下方式使用MyElement元素:

MyElement {
    Item {
    }
}

这里还有一个Item元素用作MyElement的子元素。我们将此Item元素称为external子级。要理解下面我的问题,应该清楚地了解内部和外部孩子之间的区别。

所显示代码的输出将为2,即,两个Item元素都被计算为子代。

[将来,我只想对外部子对象而不是内部子对象进行迭代(C0)(外部子对象追随内部子对象)。但是为此,我必须知道我必须从其开始的子级索引(在给定的示例中,该索引为1)。有没有办法获取该索引,或者换句话说,获取内部子代的数量?谢谢。

qt count qml parent children
1个回答
1
投票
Qt中没有内部机制可将内部子项与在自己的QML定义之外定义的子项区分开。我的解决方法如下

Component.onCompleted

//MyElement.qml Rectangle { id: root readonly property Item last_item: lastone Item { id: someitem } Item { id: lastone } Component.onCompleted: { var external_started = false; for(var i = 0 ; i < root.children.length ; ++i) { if(external_started) console.log(root.children[i].toString(), 'is external'); else if(root.children[i]===last_item) external_started = true; } } }

这是

dirty骇客,但可以。我将对最后一项的引用保存在名为MyElement { Item { objectName: 'I am external' } } 的只读属性中,这将区分我在qml定义中的最后一项。在qml文件之外添加的其他项将放置在子级列表中此项之后。

© www.soinside.com 2019 - 2024. All rights reserved.