Javascript QML:StackView和replace

Javascript QML:StackView和replace,javascript,memory-leaks,qml,qt5,Javascript,Memory Leaks,Qml,Qt5,我不确定是否正确使用StackView。 我有几个QML对象,我在堆栈视图中显示它们替换当前项。这是一种不使用两个加载程序进行转换的简单方法 比如: import QtQuick 2.5 import QtQuick.Controls 1.4 StackView { id: stack anchors.fill: parent initialItem: initObj } Component { id: initObj ModuleHome {} }

我不确定是否正确使用
StackView
。 我有几个QML对象,我在
堆栈视图中显示它们替换当前项。这是一种不使用两个
加载程序进行转换的简单方法

比如:

import QtQuick 2.5
import QtQuick.Controls 1.4

StackView {
    id: stack
    anchors.fill: parent
    initialItem: initObj
}

Component {
    id: initObj
    ModuleHome {}
}

Component {
    id: obj1
    Module1 {}
}

// ...

stack.push({item: item, replace: true, destroyOnPop: true})
碰巧我在一个页面中有一个bug,我注意到调试控制台中的错误消息在我按下对象时重复了很多次

即。 第一次:

qrc:/MyObject.qml:15:TypeError:无法写入null的属性

第二次:

qrc:/MyObject.qml:15:TypeError:无法写入null的属性

qrc:/MyObject.qml:15:TypeError:无法写入null的属性

第三次:

qrc:/MyObject.qml:15:TypeError:无法写入null的属性

qrc:/MyObject.qml:15:TypeError:无法写入null的属性

qrc:/MyObject.qml:15:TypeError:无法写入null的属性

我想知道
push
方法中的
replace
标志是否确实
pop
(并因此销毁)对象和包含的所有对象。

StackView中有三个主要导航操作:push()、pop()和replace(通过指定参数replace to push()进行替换)。这些对应于经典的堆栈操作,其中“推送”将一个项目添加到堆栈顶部,“弹出”将从堆栈中删除顶部项目,“替换”类似于一个弹出,后面跟着一个推送,因为它用一个新项目替换堆栈上最顶部的项目

我认为你的问题可能与此有关:


(使用项目而不是组件)

那么您的问题是什么?你说的2
Loader
s是什么?什么是
?问题是:“我是否正确使用了StackView?”,“在推送新对象之前是否替换了实际弹出的对象?”。如果要在对象之间进行转换,需要两个加载程序:一个包含当前内容,另一个包含新内容,然后它们将交换。item只是一个显示代码的占位符,它是组件的id(obj1等)。您可能想查看
SwipeView
是的,您是对的。在这些天里,我试图改变我的代码,就像在那个线程中一样,我解决了这个问题。