【发布时间】:2016-12-30 00:09:28
【问题描述】:
我想通过主文件中的 ID 访问我的 QML 元素,但它不起作用。在我的测试(案例)环境中,我有 2 个文件:
- main.qml,这是我要通过ID访问的文件
- 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);
我无法通过 Accounts.qml 中定义的 Pane {} 元素。 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
如何在 main.qml 文档中通过 ID 任意访问 QML 元素?
【问题讨论】: