Qt 改变装载机来源的分段故障
我面临着一个非常奇怪的问题,用ListModel的ListElement更改加载程序的源。 如何复制它: 设置加载程序的源loader.source=Page1.qml 再次更改加载程序source loader.setSourcePage2.qml, listModel.get0 最后再次更改源,如第一步中所示: loader.source=Page1.qml 故障会出现。 代码如下: main.qmlQt 改变装载机来源的分段故障,qt,segmentation-fault,qml,Qt,Segmentation Fault,Qml,我面临着一个非常奇怪的问题,用ListModel的ListElement更改加载程序的源。 如何复制它: 设置加载程序的源loader.source=Page1.qml 再次更改加载程序source loader.setSourcePage2.qml, listModel.get0 最后再次更改源,如第一步中所示: loader.source=Page1.qml 故障会出现。 代码如下: main.qml Window { visible: true width: 640
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
}
}
第1.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))
}
}
第2.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进行编译。好吧,想想你在做什么: 您只使用一个加载程序 将包含数据模型的组件加载到其中 该组件将另一个组件加载到引用模型的加载程序中 具有该模型的对象将被销毁,并替换为引用现在已销毁的模型的对象 当然你会撞车的。你真的把地毯从QML下面拉出来了 如果您设置文本值,它不会崩溃,因为它不引用模型
您应该改用StackView。新打开的页面不会替换具有加载程序的项目,而只是将其推到上面,直到它被销毁,以您离开的状态返回上一页。我想是这样的,但当您更改加载程序源而不是第二页时,会出现崩溃,这真的很奇怪loads@AbdelilahElAissaoui何时发生取决于QML内部,发生的原因已经解释过了。您传递了一个模型项,它是一个JS对象,在模型被那个额外的引用破坏后,它实际上保持活动状态。但是当您设置另一个源时,它必须取消设置前一个源,它会运行到现在悬空的对lmIcs.Hmmm的引用中。我试过StackView,效果非常好。谢谢