Я хочу получить доступ к моим элементам QML по ID из основного файла, но он не работает. В моем тесте (случай) среды у меня есть 2 файла:Qt: доступ к элементам произвольно по ID в QML
- main.qml, это файл, из которого я хочу, чтобы получить доступ по идентификатору
- Accounts.qml, это файл, в котором определен мой элемент
main.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
Item {
Accounts {
id: accounts
}
Component.onCompleted: {
console.log(accounts);
console.log(accounts.accounts_pane);
console.log(accounts.list_area);
console.log(accounts.accounts_pane.list_area.list_column.list_identities.model);
}
}
Accounts.qml
import QtQuick 2.7
import QtQuick.Controls 2.0
Pane {
id: accounts_pane
anchors {
fill: parent
}
Rectangle {
id: list_area
border.color: "black"
border.width: 2
anchors {
left: parent.left
right: parent.right
top: parent.top
bottom: parent.bottom
}
Column {
id: list_column
ListView {
id: list_identities
width: list_area.width
height: 200
model: ListModel {
ListElement {
name: "Bill Smith"
number: "555 3264"
}
ListElement {
name: "John Brown"
number: "555 8426"
}
}
delegate: Text {
text: name + ',' + number
}
}
}
}
}
Итак, из файла main.qml я хочу изменить модель учетных записей (разные компании используют разные учетные записи), и мне нужно сделать это с помощью Javascript. (Моя модель - это класс C++, зарегистрированный в движке QML, но я буду использовать Javascript для переключения различных объектов модели). Нотация для доступа к модели, как я понимаю, должно быть что-то вроде этого:
accounts.accounts_pane.list_area.list_column.list_identities.model
Однако при тестировании его с console.log():
console.log(accounts);
console.log(accounts.accounts_pane);
console.log(accounts.list_area);
console.log(accounts.accounts_pane.list_area.list_column.list_identities.model);
Я не могу пройти мимо элемента Pane {}, который определен в Accounts.qml. Выход qmlscene
показывает мне эти ошибки:
hier $ qmlscene main.qml
qml: QQuickPane(0x13b85f0)
qml: undefined
qml: undefined
file:///QT_snippets/qmlscenes/hier/main.qml:13: TypeError: Cannot read property 'list_area' of undefined
Как вы можете получить доступ к элементам QML по ID произвольно из main.qml документа?
спасибо!О интерфейсах, как вы его определяете? Является ли это функцией JavaScript? – Nulik
@Nulik - это набор свойств, функций или псевдонимов - все, что вам нужно. Например, если вам нужно только установить модель, а затем выставить ее как псевдоним. – dtech