Qt 在自定义元素上迭代并调用函数的QML
我有一个名为MenuButton的自定义元素:Qt 在自定义元素上迭代并调用函数的QML,qt,function,qml,loops,Qt,Function,Qml,Loops,我有一个名为MenuButton的自定义元素: import QtQuick 1.1 import VPlay 1.0 Image { property alias text: buttontext.text property alias mouseArea: area property alias fontBold: buttontext.font.bold property alias textSize: buttontext.font.pixelSize id: button sour
import QtQuick 1.1
import VPlay 1.0
Image {
property alias text: buttontext.text
property alias mouseArea: area
property alias fontBold: buttontext.font.bold
property alias textSize: buttontext.font.pixelSize
id: button
source: "img/cloudButton.png"
opacity: 1
Text {
id: buttontext
color: "black"
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 50
font.bold: true
}
MouseArea {
id: area
anchors.fill: parent
onPressed: button.opacity = 0.7
onReleased: button.opacity = 1.0
onCanceled: button.opacity = 1.0
}
function doStuff {
// do something here
}
width: 200
height: 60
}
现在,在我的主视图中,我有一个列,其中有5个菜单按钮。我想迭代它们并调用函数doStuff。我该怎么做?
我试过column.childAti之类的东西,都没用
MainView.qml
Rectangle {
width: 480; height: 320
// HERE IS MY PROBLEM, how do I iterate over all my elements in the column?
function update() {
for(var i = 0; i < 5; i++) {
column.childAt(i).doStuff(); // THIS IS WHAT I WANT TO DO
}
}
Column {
id: column
spacing: 5
anchors.centerIn: parent
Repeater {
id: repeater
model: 5
MenuButton {
id: levelbutton
text: "Level " + (modelData+1);
source: "img/cloud4.png"
}
}
}
}
问题出在MainView.qml中的更新函数中
我不知道如何迭代元素并调用doStuff函数。从中的源代码中可以看出,您无法访问子元素 但是您可以改变调用dostaff方法的方式:您希望何时调用它?经过一段时间后,然后在菜单按钮中添加一个计时器元素,或者在信号出现时添加?在后一种情况下,您可以使用Connections元素并监听调用qml文件中发出的信号,在该文件中使用列和中继器
干杯,克里斯从我在中的源代码中看到,您无法访问children元素 但是您可以改变调用dostaff方法的方式:您希望何时调用它?经过一段时间后,然后在菜单按钮中添加一个计时器元素,或者在信号出现时添加?在后一种情况下,您可以使用Connections元素并监听调用qml文件中发出的信号,在该文件中使用列和中继器 干杯,克里斯你可以使用附加信号,如下所示:
import QtQuick 1.0
Rectangle {
height: 600
width: 600
Repeater {
model: 5
Item {
Component.onCompleted: console.log('Component ' + index + ' completed!')
}
}
}
但是,请注意,这个命令操作不好,因为它将被称为模型更新后的所有时间。可能您遇到了问题X并询问如何获得Y,您认为这将解决您的X?您可以使用附加信号,如下所示:
import QtQuick 1.0
Rectangle {
height: 600
width: 600
Repeater {
model: 5
Item {
Component.onCompleted: console.log('Component ' + index + ' completed!')
}
}
}
但是,请注意,这个命令操作不好,因为它将被称为模型更新后的所有时间。可能您遇到了问题X并询问如何获得Y,您认为这将解决您的X?您可以通过存在于所有QTObject上的children属性访问元素的子元素。它包含一个子元素数组,可以在javascript中自由访问 例如,element.children[0].doStuff
一般来说,您应该避免需要手动迭代子级的操作。但是,如果您试图编写在每个子元素上泛型调用某些内容的代码,您并不总是有选择。您可以通过存在于所有对象上的children属性访问元素的子元素。它包含一个子元素数组,可以在javascript中自由访问 例如,element.children[0].doStuff
一般来说,您应该避免需要手动迭代子级的操作。但是,如果您试图编写在每个子级上通用调用某个内容的代码,您并不总是有选择。在MenuButton.qml中侦听信号是否明智?因为我无法访问中继器/列的子级?是的,正是我的意思!您可以使用Connections元素并将target属性设置为您的调用代码,例如矩形并侦听您在那里发出的信号。如果您从更大的角度解释您的情况,我们可能会找到更好的解决方案。倾听MenuButton.qml中的信号是否明智?因为我无法访问中继器/列的子级?是的,正是我的意思!您可以使用Connections元素并将target属性设置为您的调用代码,例如矩形并侦听您在那里发出的信号。如果你从更大的角度解释你的情况,我们可能会找到更好的解决方案。