我正面临一个非常奇怪的问题,即更改Loader
的来源ListElement
(ListModel
)。
如何重现它:
loader.source = "Page1.qml"
loader.setSource("Page2.qml",
listModel.get(0))
loader.source = "Page1.qml"
以下是代码:
main.qml
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Button {
id: button
text: qsTr("Load page 1")
onClicked: mainLoader.source="Page1.qml"
}
Loader {
anchors.left: button.right
id: mainLoader
width: 149
height: 101
}
}
Page1.qml
Rectangle {
color: "red"
width: 149
height: 101
ListModel {
id: lmIcs
ListElement {
code: "1"
name: "Abdelilah"
lastname: "El Aissaoui"
}
}
Button {
text: "Load page 2"
onClicked: mainLoader.setSource("Page2.qml", lmIcs.get(0))
}
}
Page2.qml
Rectangle {
color: "lightgray"
width: 149
height: 101
property int code;
property string name;
property string lastname;
Text {
text: code + " - " + name + " " + lastname
}
}
我注意到使用硬编码值加载加载page2的行将使segfault消失,但显然这不是解决方案:
onClicked: mainLoader.setSource("Page2.qml", {code: "1", name: "Abdelilah", lastname: "El Aissaoui" })
这是一个错误还是我做错了什么?
如果有帮助,我正在使用Linux mint 17.3并使用CLang和GCC进行编译。
答案 0 :(得分:1)
好吧,想想你在做什么:
当然你会崩溃。你真的从QML下拉地毯。
如果设置文字值,它不会崩溃,因为它没有引用模型。
您应该使用StackView
代替。新打开的页面不会替换具有加载器的项目,而只是将其推到其上,直到它被销毁,然后返回到您离开它的状态中的上一页。