QML:StackView和替换

时间:2016-11-15 09:48:53

标签: javascript memory-leaks qml qt5

我不确定正确使用StackView。 我有几个QML对象,我展示它们替换StackView中的currentItem。这是一种不使用两个Loaders进行转换的简单方法。

类似的东西:

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})

碰巧我在一个页面上有一个错误,我注意到调试控制台中的错误消息重复了我推动对象的次数。

即。 第一次:

  

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

的属性

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

1 个答案:

答案 0 :(得分:1)

http://doc.qt.io/qt-5/qml-qtquick-controls-stackview.html

  

StackView中有三个主要的导航操作:push(),pop()和replace(通过指定参数replace替换为push()来替换)。这些对应于经典的堆栈操作,其中" push"将一个项目添加到堆栈的顶部," pop"从堆栈中删除顶部项目,"替换"就像一个pop然后按,因为它用一个新项替换堆栈中最顶层的项

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

QML StackView: Item Destroyed on pop

(使用Item而不是Component)