Russian Qt Forum

Qt => Qt Quick => Тема начата: neiro от Июль 08, 2016, 13:02



Название: Доступ к элементам qml из другого qml-файла
Отправлено: neiro от Июль 08, 2016, 13:02
Есть два файла qml.

1. main.qml

Код:
Window {
  visible: true

  Rectangle {
      id:rect
      width: 200
      height: 200
      color:"red"

      MouseArea {
          id: mouse
          anchors.fill: parent
      }
  }
}

2. secondary.qml

Код:
Window {
    visible: true

    Rectangle {
        id:rect2
        width: 300
        height: 300
        color:"green"

        MouseArea {
            anchors.fill:parent
            onClicked: {
                console.log ("click")
            }
        }
    }
}

Как в событии OnClicked для rect2 изменить цвет у rect?


Название: Re: Доступ к элементам qml из другого qml-файла
Отправлено: Отражение луны от Июль 09, 2016, 00:23
Все зависит от того как ты создаешь эти окна. То есть файла то 2, но грузишь ты их как?
Так или иначе задача сводится к тому, чтобы иметь в одном окне ссылку на другое окно. Объявить property можно так:
Код:
Window {
id: mainWindow
property var secondWindow: null
затем нужно при создании окна запихать туда ссылку на второе окно, после чего можно будет легко вызывать любые его функции и менять любые значения:
Код:
onClicked: console.log(secondWindow.visible);
Ну а чтобы цвет менять - тебе нужно будет задать на него алиас, или же использовать property binding:
Код:
property alias rectColor: rect.color
или
Код:
id: secondWindow
property string rectColor: "green"
...
Rectangle {
color: secondWindow.rectColor
...
Как результат:
Код:
onClicked: secondWindow.rectColor = "yellow"