Динамическое создание объектов в QML
Я новичок в QML и хотел бы понять, как работает создание объектов при разделении кода по разным файлам (как это кажется хорошей практикой кода).
Я знаю, что могу назвать свойство элемента в том же файле:
// MyItem.qml
Item {
id: myItem
property string name: "Myself"
onClicked: {
console.log(myItem.name)
}
}
но как мне создать экземпляр одного и того же элемента в другом файле?
// Main.qml
Button {
onClicked: {
console.log(myItem.name)
}
}
Бросает ReferenceError: name is not defined
ошибка, которая, как я полагаю, означает: "невозможно вызвать имя свойства неопределенного объекта".
Это обычная практика в QML (таких примеров не видно) или все просто помещают все в один файл?
1 ответ
Вы делаете что-то вроде:
// Main.qml
MyItem {
id: thisIsMyItem
}
Button {
onClicked: console.log(thisIsMyItem.name)
}
Идея состоит в том, что вы можете использовать компоненты, которые вы объявили в том же документе, на который ссылается их идентификатор. Вы называете эти файлы "документы" в QML.
Другое дело, что вам не нужно использовать идентификатор myItem в MyItem.qml, вы можете просто ссылаться на свойство name с его именем. Конечно, использование идентификатора необходимо, когда у вас есть несколько компонентов в одном документе со свойством 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)
}
}
Одно замечание: что onClicked в вашем MyItem.qml вызовет синтаксическую ошибку, так как Item не имеет сигнала clicked().
Надеюсь это поможет.