Criação de objeto dinâmico em QML

0

Sou novo no QML e gostaria de entender como a criação de objetos funciona ao dividir o código em arquivos diferentes (como se fosse uma boa prática de código).

Eu sei que posso chamar a propriedade de um item dentro do mesmo arquivo:

// MyItem.qml
Item {
  id: myItem
  property string name: "Myself"

  onClicked: {
    console.log(myItem.name)
  }
}

mas como crio uma instância do mesmo item em um arquivo diferente?

// Main.qml
Button {
  onClicked: {
    console.log(myItem.name)
  }
}

Lança um erro ReferenceError: name is not defined que, suponho, significa: "não é possível chamar o nome da propriedade de um objeto indefinido".

Essa prática é comum em QML (não vejo muitos exemplos fazendo isso) ou todos simplesmente colocam tudo no mesmo arquivo?

    
por Cimm 16.03.2015 / 20:43

1 resposta

2

Você faz algo como:

// Main.qml
MyItem {
    id: thisIsMyItem
}
Button {
    onClicked: console.log(thisIsMyItem.name)
}

A idéia é que você pode usar os componentes declarados no mesmo documento referenciado por seu id. Você chama esses arquivos de "documentos" no QML.

Outra coisa é que você não precisa usar o myItem id em MyItem.qml, você pode simplesmente referenciar a propriedade name com seu nome. É claro que usar o id é necessário quando você tem vários componentes no mesmo documento com a propriedade 'name'.

// MyItem.qml
Item {
    id: myItem
    property string name: "Myself"
    Item {
        id: secondItem
        property string name: "Second Item"
        Component.onCompleted: console.log("This item's name is " + name + ", and parent item's name is " + myItem.name) 
    }
}

Uma observação: que onClicked em seu MyItem.qml geraria um erro de sintaxe, pois o item não tem sinal de clicked ().

Espero que isso ajude.

    
por Zsombor Egri 16.03.2015 / 21:23