我想通過主文件中的ID訪問我的QML元素,但它不起作用。在我的測試(案例)的環境我有2個文件:Qt:通過QML中的ID任意訪問元素
- 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
你怎麼能由ID從main.qml文件訪問QML元素隨意?
非常感謝!關於界面,你如何定義界面?它是一個JavaScript函數嗎? – Nulik
@Nulik - 它是一個屬性,函數或別名的集合 - 無論你需要什麼。例如,如果您只需要能夠設置模型,則將其作爲別名公開。 – dtech