我有几个ui.qml
个文件,比方说A.ui.qml
,B.ui.qml
,C.ui.qml
。
然后我必须根据State
创建一个显示A + B,B + A或B + C等的窗口。
在我的main.qml
中,我实际上写了以下内容:
...
Item {
id: contentArea
state: "state1"
AForm {
id: aForm
}
BForm {
id: bForm
}
states: [
State {
name: "state1"
PropertyChanges { target: aForm; x: 0 }
PropertyChanges { target: bForm; x: 400 }
},
State {
name: "state2"
PropertyChanges { target: aForm; x: 400 }
PropertyChanges { target: bForm; x: 0 }
}
]
...
因此,设置contentArea.state = "state2"
时,交换A和B表单。
但这只是一个例子,看它是否有效。
现在我需要创建所有表单(我想使用Component
)并仅在状态是某个时才显示它们。
怎么做?
答案 0 :(得分:1)
您将AForm
和BForm
替换为Loader
,并将此source
的{{1}} - 属性设置为正确的文件名,或者Loader
右侧sourceComponent
。
Component id
只要状态发生变化,此过程就会销毁并重新创建Loader {
id: topLoader
}
Loader {
id: bottomLoader
y: 200
}
states: [
State {
name: "state1"
PropertyChanges { target: topLoader; source: "AForm.ui.qml" }
PropertyChanges { target: bottomLoader; source: "BForm.ui.qml" }
},
...
]
- 文件的实例。
您也可以使用例如a ui.qml
ListView
,snapMode: ListView.SnapToItem
,并在状态发生变化时更改interactive: false
。
您还可以创建所有对象,并且只将要显示的两个对象作为 frames 显示给currentItem
,其余对象为Item
的父级
或者您使用三个或四个null
,其中只显示两个,您可以根据需要移动,只加载要显示的文件。在这里,您需要编写更多逻辑。