StackView QML Type

提供基于堆栈的导航模型。更多

Import Statement: import QtQuick.Controls
Inherits:

Control

属性

附属物业

附加信号

  • activated() (since QtQuick.Controls 2.1 (Qt 5.8))
  • activating() (since QtQuick.Controls 2.1 (Qt 5.8))
  • deactivated() (since QtQuick.Controls 2.1 (Qt 5.8))
  • deactivating() (since QtQuick.Controls 2.1 (Qt 5.8))
  • removed() (since QtQuick.Controls 2.1 (Qt 5.8))

方法

详细说明

StackView 可用于一组相互关联的信息页面。例如,一个电子邮件应用程序可以用不同的视图列出最新的电子邮件、查看特定的电子邮件以及列出/查看附件。当用户打开电子邮件时,电子邮件列表视图会被推送到堆栈中,当用户选择返回时,视图又会弹出。

下面的代码段演示了一个简单的用例,即mainView 在点击相关按钮时被推送到堆栈,然后从堆栈中弹出:

ApplicationWindow {
    title: qsTr("Hello World")
    width: 640
    height: 480
    visible: true

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

    Component {
        id: mainView

        Row {
            spacing: 10

            Button {
                text: "Push"
                onClicked: stack.push(mainView)
            }
            Button {
                text: "Pop"
                enabled: stack.depth > 1
                onClicked: stack.pop()

            }
            Text {
                text: stack.depth
            }
        }
    }
}

在应用程序中使用 StackView

在应用程序中使用 StackView 非常简单,只需将其添加为窗口的子窗口即可。堆栈通常锚定在窗口的边缘,除非在顶部或底部,堆栈可能锚定在状态栏或其他类似的用户界面组件上。然后,可以通过调用其导航方法来使用堆栈。在 StackView 中显示的第一个项目是分配给initialItem 的项目,如果未设置initialItem ,则显示最上面的项目。

基本导航

StackView 支持三种主要导航操作:push ()、pop ()和replace ()。这些操作对应于经典的堆栈操作:"push"(推)将一个项目添加到堆栈顶部;"pop"(弹出)将堆栈顶部的项目移除;"replace"(替换)就像先弹出后推送,用新项目替换最顶部的项目。堆栈中最顶层的项目对应于在屏幕上currently 可见的项目。从逻辑上讲,"push "是向前或向应用程序用户界面深处导航,"pop "是向后导航,而 "replace "则是替换currentItem

推送项目

在下面的动画中,使用push() 函数将三个Label 控件推入堆栈视图:

堆栈现在包含以下项目:[A, B, C]

注意: 当堆栈为空时,push() 操作不会有过渡动画,因为没有任何东西可以过渡(通常是在应用程序启动时)。

弹出项目

继续上面的示例,通过调用pop() 删除堆栈中最顶端的项目:

堆栈现在包含以下项目:[A, B]

注意: 对深度为 1 或 0 的堆栈执行pop() 操作没有任何作用。在这种情况下,可以使用clear() 方法清空堆栈。

通过弹出操作清空项目

有时,有必要在堆栈中回退不止一步。例如,返回到应用程序中的 "主 "项或某些部分项。在这种情况下,可以指定一个项目作为pop() 的参数。这就是所谓的 "展开 "操作,即堆栈展开到指定的项。如果未找到该项目,堆栈将一直展开,直到只剩下一个项目,即currentItem 。要明确地展开到堆栈底部,建议使用pop(null),当然任何不存在的项目也可以。

在下面的动画中,我们通过调用pop(null) 将栈展开到第一个项目:

现在堆栈中只有一个项目:[A]

替换项目

在下面的动画中,我们通过replace 最上面的项目:D

堆栈现在包含以下项目:[A, B, D]

深度链接

深度链接是指将应用程序启动到一个特定的状态。例如,一个报纸应用程序可以绕过最上面的项目,启动到显示特定文章的状态。就 StackView 而言,深度链接意味着可以修改堆栈的状态,以至于可以将一组项目推到堆栈顶部,或将堆栈完全重置为给定状态。

StackView 中的深度链接 API 与基本导航相同。推送一个数组而不是单个项目时,会将该数组中的所有项目添加到堆栈中。不过,转换动画仅适用于数组中的最后一个项目。push() 的正常语义适用于深层链接,也就是说,它会将任何被推入堆栈的内容添加到堆栈中。

注意: 只加载数组的最后一项。其余的项目只有在需要时才加载,要么是在后续调用 pop 时,要么是在请求使用get() 获取项目时。

根据堆栈 [A、B、C],我们可以得到如下结果:

  • push([D, E, F]) => [A, B, C, D, E, F] - C 和 F 之间的 "推 "过渡动画
  • replace([D, E, F]) => [A, B, D, E, F] - "替换 "C 和 F 之间的过渡动画
  • clear() 后跟push([D, E, F]) => [D, E, F] - 由于堆栈是空的,所以没有推项目的过渡动画。

查找项目

应用程序没有引用的项目可通过调用find() 找到。该方法需要一个回调函数,在找到匹配项之前,堆栈中的每个项(从顶部开始)都会调用该函数。如果回调函数返回true ,则find() 停止并返回匹配项,否则返回null

下面的代码在堆栈中搜索名为 "order_id "的项目,并展开到该项目。

stackView.pop(stackView.find(function(item) {
    return item.name == "order_id";
}));

您也可以使用get(index) 在堆栈中找到一个项目。

previousItem = stackView.get(myItem.StackView.index - 1));

转换

对于每次推送或弹出操作,都会对进入和退出的项目应用不同的过渡动画。这些动画定义了进入项目和退出项目的动画效果。可以为 StackView 的pushEnter,pushExit,popEnter,popExit,replaceEnter, 和replaceExit 属性分配不同的Transitions 来定制这些动画。

注意: 过渡动画会影响彼此的过渡行为。自定义其中一个的动画而忽略另一个可能会产生意想不到的结果。

下面的代码段为推和弹出操作定义了一个简单的渐变过渡:

StackView {
    id: stackview
    anchors.fill: parent

    pushEnter: Transition {
        PropertyAnimation {
            property: "opacity"
            from: 0
            to:1
            duration: 200
        }
    }
    pushExit: Transition {
        PropertyAnimation {
            property: "opacity"
            from: 1
            to:0
            duration: 200
        }
    }
    popEnter: Transition {
        PropertyAnimation {
            property: "opacity"
            from: 0
            to:1
            duration: 200
        }
    }
    popExit: Transition {
        PropertyAnimation {
            property: "opacity"
            from: 1
            to:0
            duration: 200
        }
    }
}

注意: 不支持在添加到 StackView 的项目上使用锚点。通常,push、pop 和 replace 过渡会使位置产生动画效果,而应用锚点时则无法做到这一点。请注意,这只适用于项的根。对其子项使用锚点的效果与预期相同。

项目所有权

StackView 只对自己创建的项目拥有所有权。这意味着任何推送到 StackView 上的项目都不会被 StackView 销毁;只有 StackView 从ComponentsURLs 创建的项目才会被 StackView 销毁。为了说明这一点,下面示例中的信息只会在 StackView 销毁时打印,而不会在项目从堆栈中弹出时打印:

Component {
    id: itemComponent

    Item {
        Component.onDestruction: print("Destroying second item")
    }
}

StackView {
    initialItem: Item {
        Component.onDestruction: print("Destroying initial item")
    }

    Component.onCompleted: push(itemComponent.createObject(window))
}

但是,下面示例中从 URL 和组件创建的两个项目都会在从堆栈中弹出时被 StackView 销毁:

Component {
    id: itemComponent

    Item {
        Component.onDestruction: print("Destroying second item")
    }
}

StackView {
    initialItem: "Item1.qml"

    Component.onCompleted: push(itemComponent)
}

尺寸

StackView 不会从推入的项目中继承隐式大小。这意味着,将其用作contentItemDialog 等,将无法达到预期效果:

Dialog {
    StackView {
        initialItem: Rectangle {
            width: 200
            height: 200
            color: "salmon"
        }
    }
}

在这种情况下,有几种方法可以确保 StackView 具有大小:

另请参阅 Qt Quick Controls 中的"自定义 StackView"、" 使用 StackView 导航"、"导航控件"、"容器控件"和"焦点管理"。

属性文档

busy : bool [read-only]

该属性显示过渡是否正在运行。


currentItem : Item [read-only]

该属性显示当前堆栈中最顶端的项目。


depth : int [read-only]

该属性显示当前推入堆栈的项目数。


empty : bool [read-only, since QtQuick.Controls 2.3 (Qt 5.10)]

该属性显示堆栈是否为空。

此属性在 QtQuick.Controls 2.3 (Qt 5.10) 中引入。

另请参阅 depth


initialItem : var

该属性用于保存创建StackView 时应显示的初始项。初始项可以是Item,Component, 或url 。指定初始项等同于:

Component.onCompleted: stackView.push(myInitialItem)

另请参阅 push() 。


popEnter : Transition

此属性保存当另一个项目从堆栈中弹出时应用于进入堆栈的项目的过渡。

另请参阅 自定义 StackView


popExit : Transition

该属性用于保存从堆栈中弹出时应用于退出堆栈的项目的过渡。

另请参阅 自定义 StackView


pushEnter : Transition

此属性用于保存将项目推入堆栈时应用于项目进入堆栈的过渡。

另请参阅 自定义 StackView


pushExit : Transition

该属性用于保存当另一个项目被推入堆栈时应用于退出堆栈的项目的过渡。

另请参阅 自定义 StackView


replaceEnter : Transition

此属性保存当另一个项目被替换时应用于进入堆栈的项目的过渡。

另请参阅 自定义 StackView


replaceExit : Transition

该属性用于保存当项目被其他项目替换时,应用于退出堆栈的项目的过渡。

另请参阅 自定义 StackView


附加属性文档

StackView.index : int [read-only]

此附加属性保存所附加项目的堆栈索引,如果项目不在堆栈中,则保存-1


StackView.status : enumeration [read-only]

此附加属性保存所附加项目的堆栈状态,如果项目不在堆栈中,则保存StackView.Inactive

可用值:

常量说明
StackView.Inactive项目处于非激活状态(或不在堆栈中)。
StackView.Deactivating项目正在停用(弹出)。
StackView.Activating项目被激活(成为当前项目)。
StackView.Active项目处于激活状态,即当前项目。

StackView.view : StackView [read-only]

该附加属性保存所附加项目的堆栈视图,如果项目不在堆栈中,则保存null


StackView.visible : bool [since QtQuick.Controls 2.2 (Qt 5.9)]

此附加属性表示所附加项目的可见性。其值与Item::visible 的值相同。

默认情况下,StackView 会在进入转换开始时显示进入的项目,并在退出转换结束时隐藏退出的项目。显式设置此属性可覆盖默认行为,从而使位于最顶部项目下方的项目保持可见。

注意: 大多数样式的默认过渡都会将出站项滑动到视图之外,还可能将它们的不透明度动画化。为了让整个堆叠的项目保持可见,可以考虑自定义transitions ,以便可以看到下面的项目。

StackView {
    id: stackView
    property real offset: 10
    width: 100; height: 100

    initialItem: Component {
        id: page
        Rectangle {
            property real pos: StackView.index * stackView.offset
            property real hue: Math.random()
            color: Qt.hsla(hue, 0.5, 0.8, 0.6)
            border.color: Qt.hsla(hue, 0.5, 0.5, 0.9)
            StackView.visible: true
        }
    }

    pushEnter: Transition {
        id: pushEnter
        ParallelAnimation {
            PropertyAction { property: "x"; value: pushEnter.ViewTransition.item.pos }
            NumberAnimation { properties: "y"; from: pushEnter.ViewTransition.item.pos + stackView.offset; to: pushEnter.ViewTransition.item.pos; duration: 400; easing.type: Easing.OutCubic }
            NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 400; easing.type: Easing.OutCubic }
        }
    }
    popExit: Transition {
        id: popExit
        ParallelAnimation {
            PropertyAction { property: "x"; value: popExit.ViewTransition.item.pos }
            NumberAnimation { properties: "y"; from: popExit.ViewTransition.item.pos; to: popExit.ViewTransition.item.pos + stackView.offset; duration: 400; easing.type: Easing.OutCubic }
            NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 400; easing.type: Easing.OutCubic }
        }
    }

    pushExit: Transition {
        id: pushExit
        PropertyAction { property: "x"; value: pushExit.ViewTransition.item.pos }
        PropertyAction { property: "y"; value: pushExit.ViewTransition.item.pos }
    }
    popEnter: Transition {
        id: popEnter
        PropertyAction { property: "x"; value: popEnter.ViewTransition.item.pos }
        PropertyAction { property: "y"; value: popEnter.ViewTransition.item.pos }
    }
}

该属性在 QtQuick.Controls 2.2 (Qt 5.9) 中引入。


附加信号文档

[since QtQuick.Controls 2.1 (Qt 5.8)] activated()

当所连接的项目在堆栈中被激活时,就会发出该连接信号。

注: 相应的处理程序是onActivated

此信号在 QtQuick.Controls 2.1 (Qt 5.8) 中引入。

另请参阅 status


[since QtQuick.Controls 2.1 (Qt 5.8)] activating()

当所连接的项目正在堆栈中被激活时,就会发出该连接信号。

注: 相应的处理程序是onActivating

该信号在 QtQuick.Controls 2.1 (Qt 5.8) 中引入。

另请参阅 status


[since QtQuick.Controls 2.1 (Qt 5.8)] deactivated()

当所连接的项目在堆栈中停用时,就会发出该连接信号。

注: 相应的处理程序是onDeactivated

该信号在 QtQuick.Controls 2.1 (Qt 5.8) 中引入。

另请参阅 status


[since QtQuick.Controls 2.1 (Qt 5.8)] deactivating()

当所连接的项目在堆栈中被停用时,就会发出该连接信号。

注: 相应的处理程序是onDeactivating

该信号在 QtQuick.Controls 2.1 (Qt 5.8) 中引入。

另请参阅 status


[since QtQuick.Controls 2.1 (Qt 5.8)] removed()

当所连接的项目从堆栈中移除时,就会发出该连接信号。例如,它可用于安全销毁推入堆栈的项目:

Item {
    StackView.onRemoved: destroy() // Will be destroyed sometime after this call.
}

注: 相应的处理程序是onRemoved

该信号在 QtQuick.Controls 2.1 (Qt 5.8) 中引入。

另请参阅 status


方法文档

void clear(transition)

删除堆栈中的所有项目。

只有StackView 自己创建的项目(来自Componenturl )才会在弹出时被销毁。更多信息请参见Item Ownership

QtQuick.Controls 2.3 起,可选择指定transition 。支持转换:

常量说明
StackView.Immediate立即清空堆栈,不做任何转换(默认)。
StackView.PushTransition通过推送转换清除堆栈。
StackView.ReplaceTransition通过替换转换清除堆栈。
StackView.PopTransition通过弹出转换清除堆栈。

Item find(callback, behavior)

搜索堆栈中的特定项目。堆栈中的每个项目(以项目和索引为参数)都会调用callback 函数,直到回调函数返回true 。返回值就是找到的项目。例如

stackView.find(function(item, index) {
    return item.isTheOne
})

支持的behavior 值:

常量说明
StackView.DontLoad跳过未加载的项目(不为其调用回调函数)。
StackView.ForceLoad强制加载未加载的项目。

Item get(index, behavior)

返回堆栈中index 位置的项目,如果索引超出范围,则返回null

支持的behavior 值:

常量说明
StackView.DontLoad不强制加载项目(如果尚未加载,则返回null )。
StackView.ForceLoad强制加载项目。

Item pop(item, operation)

从堆栈中取出一个或多个项目。返回从堆栈中移除的最后一个项目。

如果指定了item 参数,则将弹出直到(但不包括)item 的所有项目。如果itemnull ,则会弹出下至第一个项目(但不包括第一个项目)的所有项目。如果未指定,则只弹出当前项目。

注意: 在深度为 1 或 0 的堆栈上执行 pop() 操作不会产生任何结果。在这种情况下,可以使用clear() 方法清空堆栈。

只有StackView 自己创建的项目(来自Componenturl )才会在弹出时被销毁。更多信息请参见Item Ownership

可以选择指定operation 作为最后一个参数。支持的操作:

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带有推送过渡的操作(自QtQuick.Controls 2.1 起)。
StackView.ReplaceTransition带有替换过渡的操作(自QtQuick.Controls 2.1 起)。
StackView.PopTransition带 pop 过渡的操作(自QtQuick.Controls 2.1 起)。

如果没有提供任何操作,则将使用PopTransition

示例

stackView.pop()
stackView.pop(someItem, StackView.Immediate)
stackView.pop(StackView.Immediate)
stackView.pop(null)

注意: 如果编译 QML,请使用强类型的popToItem,popToIndexpopCurrentItem 函数。

另请参阅 clear(),Popping Items, 和Unwinding Items via Pop


[since 6.7] Item popCurrentItem(operation)

从堆栈中取出currentItem 。返回从堆栈中移除的最后一个项目,如果depth1 ,则返回null

只有StackView 自己创建的项目(来自Componenturl )才会在弹出时被销毁。更多信息请参阅Item Ownership

最后一个参数可指定为operation 。支持的操作:

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供任何操作,将使用PopTransition

此函数等同于popToIndex(stackView.currentIndex - 1)

此方法在 Qt 6.7 中引入。

另请参阅 clear(),Popping Items, 和Unwinding Items via Pop


[since 6.7] Item popToIndex(index, operation)

将所有项目下拉至(但不包括)index 。返回从堆栈中移除的最后一个项目。

如果index 越界,则会发出警告并返回null

只有StackView 自己创建的项目(来自Componenturl )才会在弹出时被销毁。更多信息请参见Item Ownership

最后一个参数可指定为operation 。支持的操作:

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供任何操作,将使用PopTransition

stackView.popToIndex(stackView.depth - 2, StackView.Immediate)

此方法在 Qt 6.7 中引入。

另请参阅 clear(),Popping Items, 和Unwinding Items via Pop


[since 6.7] Item popToItem(item, operation)

将所有项目下拉至(但不包括)item 。返回从堆栈中删除的最后一个项目。

如果itemnull ,则会产生警告并返回null

只有StackView 自己创建的项目(来自Componenturl )才会在弹出时被销毁。更多信息请参阅Item Ownership

最后一个参数可选择指定为operation 。支持的操作:

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带有推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供任何操作,将使用PopTransition

stackView.popToItem(someItem, StackView.Immediate)

此方法在 Qt 6.7 中引入。

另请参阅 clear(),Popping Items, 和Unwinding Items via Pop


Item push(item, properties, operation)

使用可选的operationitem 推入堆栈,并可选地在该项目上应用一组properties 。项目可以是ItemComponenturl 。返回当前项目。

StackView 如果推送的项目是 或 ,则会自动创建一个实例,该实例会在从堆栈中弹出时被销毁。更多信息请参阅 。Component url Item Ownership

可选的properties 参数指定了推送项的初始属性值映射。对于动态创建的项目,这些值会在创建最终完成前应用。这比在创建后设置属性值更有效率,尤其是在定义了大量属性值集的情况下,而且还允许在创建项目前设置属性绑定(使用Qt.binding() )。

推送单个项目:

stackView.push(rect)

// or with properties:
stackView.push(rect, {"color": "red"})

通过将多个项目作为附加参数或数组传递,可以同时推送多个项目。最后一个项目将成为当前项目。每个项目后面都可以有一组要应用的属性。

传递可变数量的参数:

stackView.push(rect1, rect2, rect3)

// or with properties:
stackView.push(rect1, {"color": "red"}, rect2, {"color": "green"}, rect3, {"color": "blue"})

推送一个项目数组:

stackView.push([rect1, rect2, rect3])

// or with properties:
stackView.push([rect1, {"color": "red"}, rect2, {"color": "green"}, rect3, {"color": "blue"}])

可选择将operation 指定为最后一个参数。支持的操作

常量描述
StackView.Immediate不带转换的立即操作。
StackView.PushTransition带有推送过渡的操作(自QtQuick.Controls 2.1 起)。
StackView.ReplaceTransition带有替换过渡的操作(自QtQuick.Controls 2.1 起)。
StackView.PopTransition带 pop 过渡的操作(自QtQuick.Controls 2.1 起)。

如果没有提供任何操作,则在堆栈为空时使用Immediate ,否则使用PushTransition

注意: 堆栈中已存在的项目不会被推送。

注意: 如果编译 QML,请使用强类型的pushItempushItems 函数。

另请参阅 initialItemPushing Items


[since 6.7] Item pushItem(item, properties, operation)

item 推入堆栈,可选择应用一组properties ,使用可选的operation 。返回当前项目(最后一个项目)。

最后一个参数可指定为operation 。支持的操作

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供任何操作,将使用PushTransition

要将多个项目推入堆栈,请使用pushItems() 。

此方法在 Qt 6.7 中引入。

另请参阅 initialItemPushing Items


[since 6.7] Item pushItem(component, properties, operation)

该函数重载 pushItem()。

component 推入堆栈,可选择应用一组properties ,使用可选的operation 。返回当前项目(最后一个项目)。

可选择将operation 指定为最后一个参数。支持的操作

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带有推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供任何操作,将使用PushTransition

要将多个项目推入堆栈,请使用pushItems() 。

此方法在 Qt 6.7 中引入。

另请参阅 initialItemPushing Items


[since 6.7] Item pushItem(url, properties, operation)

该函数重载 pushItem()。

url 推入堆栈,可选择应用一组properties ,使用可选的operation 。返回当前项目(最后一个项目)。

可选择将operation 指定为最后一个参数。支持的操作

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供任何操作,将使用PushTransition

要将多个项目推入堆栈,请使用pushItems() 。

此方法在 Qt 6.7 中引入。

另请参阅 initialItemPushing Items


[since 6.7] Item pushItems(items, operation)

使用可选的operationitems 推入堆栈,并对每个元素应用一组属性。items 是一个元素数组。每个元素可以是ItemComponenturl ,后面还可以跟一个可选的属性参数(见下文)。返回当前项目(最后一个项目)。

StackView 如果推送的元素是 或 ,则会自动创建一个实例,该实例会在从堆栈中弹出时被销毁。更多信息请参见 。Component url Item Ownership

可选属性参数位于每个项目之后,指定了初始属性值的映射。对于动态创建的项目,这些值会在创建完成前应用。这比在创建后设置属性值更有效率,尤其是在定义了大量属性值的情况下,而且还允许在创建项目前设置属性绑定(使用Qt.binding() )。

stackView.push([item, rectComponent, Qt.resolvedUrl("MyItem.qml")])

// With properties:
stackView.pushItems([
    item, { "color": "red" },
    rectComponent, { "color": "green" },
    Qt.resolvedUrl("MyItem.qml"), { "color": "blue" }
])

// With properties for only some items:
stackView.pushItems([
    item, { "color": "yellow" },
    rectComponent
])

可以选择将operation 指定为最后一个参数。支持的操作

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带有推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供任何操作,将使用PushTransition

要推送单个项目,请使用相关的pushItem 函数:

注意: 堆栈中已存在的项目不会被推送。

此方法在 Qt 6.7 中引入。

另请参阅 initialItem,pushItem, 和Pushing Items


Item replace(target, item, properties, operation)

用指定的item 和可选的operation 替换堆栈中的一个或多个项目,并可选地在项目上应用一组properties 。项目可以是ItemComponenturl 。返回成为当前项目的项目。

只有StackView 自己创建的项目(来自Componenturl )才会在弹出时被销毁。更多信息请参阅Item Ownership

如果指定了target 参数,则会替换从target 开始的所有项目。如果targetnull ,堆栈中的所有项目都将被替换。如果未指定,则只会替换最上面的项目。

StackView 如果替换项是 ,或 ,系统将自动创建一个实例。可选的 参数指定了替换项的初始属性值映射。对于动态创建的项,这些值会在创建完成前应用。这比在创建后设置属性值更有效,尤其是在定义了大量属性值的情况下,而且还允许在创建项目前设置属性绑定(使用 ()) 。Component url properties Qt.binding

替换顶层项目:

stackView.replace(rect)

// or with properties:
stackView.replace(rect, {"color": "red"})

通过将多个项目作为附加参数或数组传递,可以同时替换多个项目。每个项目后面都可以跟一组要应用的属性。

传递可变数量的参数:

stackView.replace(rect1, rect2, rect3)

// or with properties:
stackView.replace(rect1, {"color": "red"}, rect2, {"color": "green"}, rect3, {"color": "blue"})

替换项目数组:

stackView.replace([rect1, rect2, rect3])

// or with properties:
stackView.replace([rect1, {"color": "red"}, rect2, {"color": "green"}, rect3, {"color": "blue"}])

可选择将operation 指定为最后一个参数。支持的操作

常量说明
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带有推送过渡的操作(自QtQuick.Controls 2.1 起)。
StackView.ReplaceTransition带有替换过渡的操作(自QtQuick.Controls 2.1 起)。
StackView.PopTransition带 pop 过渡的操作(自QtQuick.Controls 2.1 起)。

如果没有提供任何操作,则在堆栈为空时使用Immediate ,否则使用ReplaceTransition

下面的示例说明了如何使用 replace() 进行 push 和 pop 过渡。

StackView {
    id: stackView

    initialItem: Component {
        id: page

        Page {
            Row {
                spacing: 20
                anchors.centerIn: parent

                Button {
                    text: "<"
                    onClicked: stackView.replace(page, StackView.PopTransition)
                }
                Button {
                    text: ">"
                    onClicked: stackView.replace(page, StackView.PushTransition)
                }
            }
        }
    }
}

注意: 如果编译 QML,请使用强类型的replaceCurrentItem 函数。

另请参阅 push() 和Replacing Items


[since 6.7] Item replaceCurrentItem(items, operation)

从堆栈中取出currentItem ,并推入items 。如果指定了可选的operation ,则将使用相关的转换。每个项目后都可以跟一组应用于该项的可选属性。返回当前的项目。

可选属性参数位于每个项目之后,指定了初始属性值的映射。对于动态创建的项目,这些值会在创建完成前应用。这比在创建后设置属性值更有效,尤其是在定义了大量属性值的情况下,而且还允许在创建项目前设置属性绑定(使用Qt.binding()) 。

只有StackView 自己创建的项目(来自Componenturl )才会在弹出时被销毁。更多信息请参阅Item Ownership

最后一个参数可选择指定operation 。支持的操作:

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供任何操作,将使用ReplaceTransition

stackView.replaceCurrentItem([item, rectComponent, Qt.resolvedUrl("MyItem.qml")])

// With properties:
stackView.replaceCurrentItem([
    item, { "color": "red" },
    rectComponent, { "color": "green" },
    Qt.resolvedUrl("MyItem.qml"), { "color": "blue" }
])

要推送单个项目,请使用相关的重载:

此方法在 Qt 6.7 中引入。

另请参阅 push() 和Replacing Items


[since 6.7] Item replaceCurrentItem(item, properties, operation)

该函数重载 replaceCurrentItem()。

currentItem 从堆栈中取出,并推入item 。如果指定了可选的operation ,则将使用相关的转换。如果指定了可选的properties ,它们将应用于项目。返回成为当前项目的项目。

只有StackView 自己创建的项目(来自Componenturl )才会在弹出时被销毁。更多信息请参阅Item Ownership

最后一个参数可选择指定operation 。支持的操作:

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供操作,将使用ReplaceTransition

要将多个项目推入堆栈,请使用replaceCurrentItem(items, operation)。

此方法在 Qt 6.7 中引入。

另请参阅 Replacing Items


[since 6.7] Item replaceCurrentItem(component, properties, operation)

该函数重载 replaceCurrentItem()。

从堆栈中取出currentItem ,并推入component 。如果指定了可选的operation ,则将使用相关的转换。如果指定了可选的properties ,它们将应用于项目。返回成为当前项目的项目。

只有StackView 自己创建的项目(来自Componenturl )才会在弹出时被销毁。更多信息请参阅Item Ownership

最后一个参数可选择指定operation 。支持的操作:

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带有推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供操作,将使用ReplaceTransition

要将多个项目推入堆栈,请使用replaceCurrentItem(items, operation)。

此方法在 Qt 6.7 中引入。

另请参阅 Replacing Items


[since 6.7] Item replaceCurrentItem(url, properties, operation)

该函数重载 replaceCurrentItem()。

从堆栈中取出currentItem ,并推入url 。如果指定了可选的operation ,则将使用相关的转换。如果指定了可选的properties ,它们将应用于项目。返回成为当前项目的项目。

只有StackView 自己创建的项目(来自Componenturl )才会在弹出时被销毁。更多信息请参阅Item Ownership

最后一个参数可选择指定operation 。支持的操作:

常量描述
StackView.Immediate不带转换的即时操作。
StackView.PushTransition带推送转换的操作。
StackView.ReplaceTransition带有替换转换的操作。
StackView.PopTransition带 pop 过渡的操作。

如果没有提供操作,将使用ReplaceTransition

要将多个项目推入堆栈,请使用replaceCurrentItem(items, operation)。

此方法在 Qt 6.7 中引入。

另请参阅 Replacing Items


© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.