QML: StackView and replace

QML: StackView and replace

本文关键字:replace and StackView QML      更新时间:2023-09-26

我不确定是否正确使用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})

碰巧我在一个页面上有一个错误,我注意到调试控制台的错误信息在我按压对象时重复了很多次。

。第一次:

独有:/MyObject。qml:15: TypeError: Cannot write property of null

第二次

:

独有:/MyObject。qml:15: TypeError: Cannot write property of null

独有:/MyObject。qml:15: TypeError: Cannot write property of null

第三时间:

独有:/MyObject。qml:15: TypeError: Cannot write property of null

独有:/MyObject。qml:15: TypeError: Cannot write property of null

独有:/MyObject。qml:15: TypeError: Cannot write property of null

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

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

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

我想你的问题可能与这个有关:

QML StackView: Item Destroyed on pop

(使用Item代替Component)