MyTetra Share
Делитесь знаниями!
О, смотри-ка какое хорошее место. Дайте два!
Обращение по идентификатору id
10.01.2018
18:09
Текстовые метки: qt, qml, идентификатор, id, обращение, доступ
Раздел: Компьютер - Программирование - Язык C++ - Библиотека Qt - QML - Краткая памятка по QML

Обращение по идентификатору id внутри одного файла


Если элемент имеет идентификатор id, то к нему (и к его открытым свойствам) можно обратиться из любого места QML-кода внутри одного файла, независимо от вложенности элементов. Например, можно обратиться из вышестоящего элемента в нижестоящий:


Rectangle {

id: rectangle1


Text {

id: text1

text: "Value text 1"

anchors.left: rectangle1.horizontalCenter

}

}


Text {

id: text2

text: text1.text

anchors.left: parent.left

anchors.bottom: parent.bottom

}


Здесь text2 выведет строку "Value text 1". Обращаться из нижестоящего в вышестоящий элемент по id тоже можно:


Rectangle {

id: rectangle1


Text {

id: text1

text: text2.text

anchors.left: rectangle1.horizontalCenter

}

}


Text {

id: text2

text: "Value text 2"

anchors.left: parent.left

anchors.bottom: parent.bottom

}


Здесь элемент text1 выведет строку "Value text 2".



Обращение по идентификатору id между разными файлами


При обращении к элементу по идентификатору из одного файла в другой, следует различать две ситуации:


  • Когда файлы связаны каким-то отношением
  • Когда файлы не связаны каким-то отношением


Связанность между файлами возникает например, тогда, когда тип из одного файла начинает использоваться в другом файле. Вот пример:


Bicycle.qml


Item {

id: car


property double speed: 5


Wheel {

id: frontWheel

}


Wheel {

id: backWheel

}


}


Wheel.qml


Item {

id: wheel

Component.onCompleted: {

console.log("Bicycle speed: "+car.speed);

}

}


Как видно из примера, если связанность между файлами есть, то из "подключаемого" файла Wheel.qml можно достучаться до элемента "основного" файла. Стучаться из "основного" в "подключаемый" обычно не имеет смысла, так как подключаемый файл рассматривается основным файлом как тип.


Если связи между файлами нет, то простым образом не получится достучаться до элемента по его идентификатору. Но можно использовать следующий трюк. Необходимо будет в файле, из которого происходит обращение, иметь ссылку на внешний элемент, к которому происходит обращение. Ссылку можно хранить в переменной типа var:


Wheel.qml


Item {

id: wheel


property var bicyclePointer: null

Component.onCompleted: {

console.log("Bicycle speed: "+bicyclePointer.speed);

}

}


А инициализировать ссылку можно вышестоящим кодом:


Wheel {

id: frontWheel


bicyclePointer: bicycle

}



Подключение кода других файлов


Каждый файл QML, по своей сути, является описанием какого-либо типа. Имя типа - это имя файла. Программа на QML состоит обычно из нескольких файлов. Код, расположенный в других файлах, подключается следующим образом:


  • неявно, если файл находится в той же директории что и текущий файл
  • явно, через директиву import, если файл находится в какой-либо другой директории


Подробнее о подключении файлов написано в следующей заметке:


Создание собственных элементов в QML и импортирование одного файла в другой




Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования