Qt QML 动态改变页面的项目
Qt QML change item of a page dynamically
我有 BasePage.qml 这样的:
Item {
property alias content: loader.sourceComponent
signal topBarLeftButtonClicked()
TopBar {
...
}
Loader {
id: loader
}
BottomBar {
...
}
}
这样我可以动态改变页面的内容,但我必须使用组件,而且我无法读取 DerivedPage 中内容的属性。
例如:
DerivedPage.qml
BasePage {
onTopBarLeftIconClicked: item.text //error, item is not defined
content: Component {
TextField {
id: item
}
}
}
有什么解决办法吗?
您可以在 BasePage
中定义 Loader
的 item
属性 的别名,例如:
property alias contentItem: loader.item
并在 DerivedPage
.
中引用它而不是 content
item
综合起来:
// BasePage.qml
Item {
property alias content: loader.sourceComponent
property alias contentItem: loader.item
signal topBarLeftButtonClicked()
Loader { id: loader }
}
// DerivedPage.qml
BasePage {
onTopBarLeftIconClicked: { contentItem.text = "clicked" }
content: Component { TextField { } }
}
我找到了替换加载器和组件的方法:
//BasePage.qml
Item {
default property alias data: item.data
signal topBarLeftButtonClicked()
TopBar {
...
}
Item{
id: item
}
BottomBar {
...
}
}
//DerivedPage.qml
BasePage {
onTopBarLeftIconClicked: textField.text = "string"
TextField {
anchors.fill: parent
id: textField
}
}
这样 textField 替换 BasePage.qml
中的项目
我有 BasePage.qml 这样的:
Item {
property alias content: loader.sourceComponent
signal topBarLeftButtonClicked()
TopBar {
...
}
Loader {
id: loader
}
BottomBar {
...
}
}
这样我可以动态改变页面的内容,但我必须使用组件,而且我无法读取 DerivedPage 中内容的属性。
例如:
DerivedPage.qml
BasePage {
onTopBarLeftIconClicked: item.text //error, item is not defined
content: Component {
TextField {
id: item
}
}
}
有什么解决办法吗?
您可以在 BasePage
中定义 Loader
的 item
属性 的别名,例如:
property alias contentItem: loader.item
并在 DerivedPage
.
content
item
综合起来:
// BasePage.qml
Item {
property alias content: loader.sourceComponent
property alias contentItem: loader.item
signal topBarLeftButtonClicked()
Loader { id: loader }
}
// DerivedPage.qml
BasePage {
onTopBarLeftIconClicked: { contentItem.text = "clicked" }
content: Component { TextField { } }
}
我找到了替换加载器和组件的方法:
//BasePage.qml
Item {
default property alias data: item.data
signal topBarLeftButtonClicked()
TopBar {
...
}
Item{
id: item
}
BottomBar {
...
}
}
//DerivedPage.qml
BasePage {
onTopBarLeftIconClicked: textField.text = "string"
TextField {
anchors.fill: parent
id: textField
}
}
这样 textField 替换 BasePage.qml
中的项目