1

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

さて、私のメイン ビューには、これらの MenuButtons が 5 つある列があります。そして、それらを反復処理して関数 doStuff() を呼び出したいと思います。それ、どうやったら出来るの?column.childAt(i) などを試してみましたが、何も機能しませんでした。

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 の update 関数にあります。要素を反復処理して doStuff() 関数を呼び出す方法がわかりません。

4

3 に答える 3

2

次のように、 Component.onCompletedアタッチされたシグナルを使用できます。

import QtQuick 1.0

Rectangle {
    height: 600
    width: 600

    Repeater {
        model: 5
        Item {
            Component.onCompleted: console.log('Component ' + index + ' completed!')
        }
    }
}

ただし、この命令型の操作は、モデルの更新後に常に呼び出されるため、適切ではないことを考慮してください。おそらくあなたは問題Xを抱えていて、Yを取得する方法を尋ねています、それはあなたのXを解決するでしょう?

于 2013-03-07T13:49:39.473 に答える
1

QDeclarativePositioners クラスのソース コードで見たところ、子要素にアクセスできません!

しかし、doStuff() メソッドを呼び出す方法を変更することもできます: いつ呼び出すか? しばらく時間が経過した後 (次に、Timer 要素を MenuButton に追加します)、またはシグナルが発生したときですか? 後者の場合、Connections 要素を使用して、Column と Repeater を使用する呼び出し元の qml ファイルで発行されたシグナルを聞くことができます。

乾杯、クリス

于 2013-03-07T13:05:46.567 に答える
1

すべての QtObjects に存在する children プロパティを介して、要素の子にアクセスできます。子要素の配列が含まれており、javascript で自由にアクセスできます。

例えば。element.children[0].doStuff()

一般的に言えば、子に対して手動で反復処理を行う必要があるアクションは避ける必要があります。ただし、それぞれの子に対して一般的に何かを呼び出すコードを作成しようとしている場合、常に選択肢があるとは限りません。

于 2013-03-07T16:37:32.683 に答える