StackView QML 类型

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

导入说明import QtQuick.Controls
继承

Control

属性

附加属性

附加信号

  • activated() (自 QtQuick.Controls 2.1 (Qt 5.8) 以来)
  • activating() (自 QtQuick.Controls 2.1 (Qt 5.8) 以来)
  • deactivated() (自 QtQuick.Controls 2.1 (Qt 5.8) 以来)
  • deactivating() (自 QtQuick.Controls 2.1 (Qt 5.8) 以来)
  • removed() (自 QtQuick.Controls 2.1 (Qt 5.8) 以来)

方法

  • void clear(transition)
  • Item find(callback, behavior)
  • Item get(index, behavior)
  • Item pop(item, operation)
  • 项目 popCurrentItem(operation) (自6.7版本起)
  • 项目 popToIndex(index, operation) (自6.7版本起)
  • 项目 popToItem(item, operation) (自6.7版本起)
  • 项目 push(item, properties, operation)
  • 项目 pushItem(item, properties, operation) (自6.7版本起)
  • 项目 pushItem(component, properties, operation) (自6.7版本起)
  • 项目 pushItem(url, properties, operation) (自6.7版本起)
  • 项目 pushItems(items, operation) (自6.7版本起)
  • 项目 replace(target, item, properties, operation)
  • 项目 replaceCurrentItem(items, operation) (自6.7版本起)
  • 项目 replaceCurrentItem(item, properties, operation) (自6.7版本起)
  • 项目 replaceCurrentItem(component, properties, operation) (自6.7版本起)
  • 项目 replaceCurrentItem(url, properties, operation) (自6.7版本起)

详细说明

StackView可以与一系列相互关联的信息页面一起使用。例如,一个具有分别列出最新电子邮件、查看特定电子邮件和列出/查看附件的视图的电子邮件应用程序。当用户打开电子邮件时,电子邮件列表视图会被推送到堆栈中,当用户选择返回时会被弹出。

以下示例显示了简单用法,当点击相关按钮时,《code translate="no">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非常简单,只需将其作为子元素添加到窗口中。默认情况下,堆栈附着在窗口的边缘,除了顶部或底部,可能附着在状态栏或类似的UI组件上。然后可以使用其导航方法使用堆栈。在StackView中显示的第一个项目是分配给initialItem的项目,如果没有设置initialItem,则是最顶部的项目。

基本导航

StackView支持三种主要的导航操作:push()、pop()和replace()。这些对应于传统的堆栈操作,其中“push”向堆栈顶部添加一个项目,“pop”从堆栈中删除顶部项目,“replace”相当于pop后面跟着push,用新项目替换最顶部的项目。堆栈中最顶部的项目对应于当前屏幕上可见的项目。currentItem。从逻辑上讲,“push”导航到应用程序UI的前进或深入,“pop”导航后退,“replace”替换currentItem

推送项目

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

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

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

弹出项

在上面的例子基础上继续,通过调用 pop() 函数移除堆栈中最顶部的项

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

注意:在深度为 1 或 0 的堆栈上进行 pop() 操作不起作用。在这些情况下,可以使用 clear() 方法清空堆栈。

通过弹出操作逆序项

有时,需要回退到堆栈中的多个步骤。例如,返回到应用程序中的“主”项或某种类型的部分项。在这种情况下,可以将项作为 pop() 函数的参数指定。这称为“逆序”操作,其中堆栈逆序直到指定的项。如果找不到项,则堆栈逆序直到只剩下一个项,该项变为 currentItem。要显式逆序到堆栈的底部,建议使用 pop(null),尽管任何不存在的项都将有效。

在下面的动画中,我们通过调用 pop(null) 逆序堆栈到第一个项

堆栈现在只包含一个项:[A]

替换项

在下面的动画中,我们使用 D 替换最顶部的项

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

深度链接

深度链接 意味着启动应用程序到特定的状态。例如,一个报纸应用程序可能启动到显示特定文章的状态,绕过最顶部的项。在 StackView 中,深度链接意味着能够修改堆栈的状态,以至于可以将一组项推到堆栈的顶部,或者将堆栈完全重置到给定的状态。

StackView 中深度链接的 API 与基本导航的 API 相同。用数组而不是单个项进行推送会将数组中的所有项添加到堆栈中。但是,只对数组中的最后一个项应用过渡动画。对于深度链接,push() 的正常语义适用,即它会将推上堆栈的内容添加上去。

注意:只有数组中的最后一个项会加载。其余项只有在需要时才会加载,无论是在后续对 pop 的调用上,还是在使用 get() 请求获取项时。

给定堆栈 [A, B, C],这将给我们以下结果

  • push([D, E, F]) => [A, B, C, D, E, F] - "push" 过渡动画在 C 和 F 之间
  • replace([D, E, F]) => [A, B, D, E, F] - "replace" 在 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(索引) 来访问栈中的项目。

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

转场

对于每个推送或弹出操作,都会应用不同的转场动画到进入和退出的项目。这些动画定义了进入项目应该如何动画进入,以及退出的项目应该如何动画退出。这些动画可以通过为 StackView 的 Transitions 属性分配不同的 pushEnterpushExitpopEnterpopExitreplaceEnterreplaceExit 属性来自定义。

注意:转场动画会影响彼此的转场行为。仅自定义其中一个而忽略其他可能给出意外结果。

以下片段定义了一个简单的淡入淡出转场动画,用于推送和弹出操作

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 的项目中使用锚点。通常,推送、弹出和替换转场会动画化位置,而在应用锚点时则不可能。请注意,这仅适用于项的根。为其子项应用锚点按预期工作。

项目所有权

StackView 仅对其自身创建的项目拥有所有权。这意味着任何推送到 StackView 的项目永远不会被 StackView 销毁;只有 StackView 从 组件URL 创建的项目才会被 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 不会从推送到它的项目中继承隐式大小。这意味着将用作 contentItem 的实例化为例如对话框,将不会按预期工作

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

在这种情况下确保 StackView 有大小有几种方法

另请参阅自定义 StackView使用 StackView 进行导航导航控件容器控件,以及 Qt Quick Controls 中的焦点管理

属性文档

busy : bool [只读]

此属性表示是否有一个转换正在进行。


currentItem : Item [只读]

此属性表示栈中最上层的项。


depth : int [只读]

此属性表示当前已推入栈中的项数量。


empty : bool [只读,自 QtQuick.Controls 2.3 (Qt 5.10) 开始]

此属性表示栈是否为空。

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

另请参阅depth


initialItem : var

此属性表示在 StackView 创建时应显示的初始项。初始项可以是 Item组件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 [只读]

此附加属性表示附加到它的项的栈索引,如果项不在栈中则为 -1


StackView.status : enumeration [只读]

该附加属性保存所附加项的堆栈状态,或者如果项不在堆栈中,则为 StackView.Inactive

可用值

常量描述
StackView.Inactive项处于非活动状态(或在堆栈中)。
StackView.Deactivating项正在被停用(弹出)。
StackView.Activating项正在被激活(变为当前项)。
StackView.Active项处于活动状态,即当前项。

StackView.view : StackView [只读]

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


StackView.visible : bool [自 QtQuick.Controls 2.2 (Qt 5.9) 开始存在]

该附加属性保存所附加项的可见性。值遵循 Item::visible 的值。

默认情况下,StackView 在进入过渡开始时显示进入的项,并在退出过渡结束时隐藏退出的项。显式设置此属性可以覆盖默认行为,从而使得可以保持高于顶部项的项可见。

注意: 大多数样式的默认过渡会将退出的项滑动到视图外,并可能还会对它们的透明度进行动画处理。为了使完整堆栈的项可见,请考虑自定义 过渡,以便可以看清下面的项。

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) 中引入。


附加信号文档

[自 QtQuick.Controls 2.1 (Qt 5.8) 开始存在] activated()

当所附加项在堆栈中激活时,会发出此附加信号。

注意: 对应的处理程序是 onActivated

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

另请参见 status


[自 QtQuick.Controls 2.1 (Qt 5.8) 开始存在] activating()

当所附加项在堆栈中被激活的过程中,会发出此附加信号。

注意: 对应的处理程序是 onActivating

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

另请参见 status


[自 QtQuick.Controls 2.1 (Qt 5.8) 开始存在] deactivated()

当所附加项在堆栈中被停用,会发出此附加信号。

注意: 对应的处理程序是 onDeactivated

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

另请参见 status


[自 QtQuick.Controls 2.1 (Qt 5.8) 开始存在] deactivating()

当所附加项在堆栈中被停用的过程中,会发出此附加信号。

注意: 对应的处理程序是 onDeactivating

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

另请参见 status


[自 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)在弹出时被销毁。有关更多信息,请参阅 项所有者

从 QtQuick.Controls 2.3 版本开始,可以可选地指定 过渡。支持的过渡包括:

常量描述
StackView.Immediate立即清除栈,不应用任何过渡(默认)。
StackView.PushTransition使用推入过渡清除栈。
StackView.ReplaceTransition使用替换过渡清除栈。
StackView.PopTransition使用弹出过渡清除栈。

Item find(回调, 行为)

在栈内搜索特定项目。对于栈中的每个项目,都会调用 回调 函数(带有项目及其索引作为参数),直到回调函数返回 true。返回值是找到的项目。例如

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

支持的 行为

常量描述
StackView.DontLoad跳过未加载的项目(对于这些项目不会调用回调函数)。
StackView.ForceLoad强制加载未加载的项目。

Item get(索引, 行为)

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

支持的 行为

常量描述
StackView.DontLoad项目不会被强制加载(如果尚未加载则返回 null)。
StackView.ForceLoad项目被强制加载。

Item pop(项目, 操作)

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

如果指定了 项目 参数,则将移除从该项目(但不包括该项目) downward 的所有项目。如果 项目null,则移除到(但不包括)第一个项目。如果没有指定,则只移除当前项目。

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

只会有 StackView 自己创建的项(从一个 ComponentURL)在弹出时被销毁。有关更多信息,请参阅 项所有者

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作(自 QtQuick.Controls 2.1 版本以来)。
StackView.ReplaceTransition具有替换过渡的操作(自 QtQuick.Controls 2.1 版本以来)。
StackView.PopTransition具有弹出过渡的操作(自 QtQuick.Controls 2.1 版本以来)。

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

示例

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

注意:如果您正在 编译 QML,则请使用强类型化的 popToItempopToIndexpopCurrentItem 函数。

另请参阅:clear()、移除项目通过 pop 还原项目


[自 6.7 版本开始] Item popCurrentItem(操作)

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

只会有 StackView 自己创建的项(从一个 ComponentURL)在弹出时被销毁。有关更多信息,请参阅 项所有者

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

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

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

此方法是在 Qt 6.7 版本中引入的。

另请参阅:clear()、移除项目通过 pop 还原项目


[自 6.7 版本开始] Item popToIndex(索引, 操作)

将所有项目弹出到(但不包括)索引。返回从栈中移除的最后一个项目。

如果 索引 超出范围,将产生警告并返回 null

只会有 StackView 自己创建的项(从一个 ComponentURL)在弹出时被销毁。有关更多信息,请参阅 项所有者

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

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

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

此方法是在 Qt 6.7 版本中引入的。

另请参阅:clear()、移除项目通过 pop 还原项目


[自6.7起] Item popToItem(item, operation)

将所有项目弹出到(但不包括)item。返回从栈中移除的最后一个项目。

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

只会有 StackView 自己创建的项(从一个 ComponentURL)在弹出时被销毁。有关更多信息,请参阅 项所有者

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

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

stackView.popToItem(someItem, StackView.Immediate)

此方法是在 Qt 6.7 版本中引入的。

另请参阅:clear()、移除项目通过 pop 还原项目


Item push(item, properties, operation)

使用可选的 operationitem 推送到栈上,并可选地应用一系列 properties 到该项目上。项目可以是 ItemComponenturl。返回成为当前项目的项。

StackView 如果推送的项目是 Componenturl,则会自动创建其实例,并由实例被弹出栈时销毁。更多详细信息,请参阅 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"}])

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作(自 QtQuick.Controls 2.1 版本以来)。
StackView.ReplaceTransition具有替换过渡的操作(自 QtQuick.Controls 2.1 版本以来)。
StackView.PopTransition具有弹出过渡的操作(自 QtQuick.Controls 2.1 版本以来)。

如果没有提供操作,如果栈为空,则使用 Immediate,否则使用 PushTransition

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

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

也请参阅:initialItemPushing Items


[自6.7起] Item pushItem(item, properties, operation)

item 推送到栈上,可选地应用一组 properties,使用可选的 operation。返回成为当前的项目(最后一个项目)。

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

如果没有提供操作,则使用 PushTransition

要推送多个项目到栈上,请使用 pushItems 方法。

此方法是在 Qt 6.7 版本中引入的。

也请参阅:initialItemPushing Items


[自6.7起] Item pushItem(component, properties, operation)

此函数覆盖了 pushItem()。

component 推送到栈上,可选地应用一组 properties,使用可选的 operation。返回成为当前的项目(最后一个项目)。

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

如果没有提供操作,则使用 PushTransition

要推送多个项目到栈上,请使用 pushItems 方法。

此方法是在 Qt 6.7 版本中引入的。

也请参阅:initialItemPushing Items


[自6.7起] Item pushItem(url, properties, operation)

此函数覆盖了 pushItem()。

url 推送到栈上,可选地应用一组 properties,使用可选的 operation。返回成为当前的项目(最后一个项目)。

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

如果没有提供操作,则使用 PushTransition

要推送多个项目到栈上,请使用 pushItems 方法。

此方法是在 Qt 6.7 版本中引入的。

也请参阅:initialItemPushing Items


[自6.7起] Item pushItems(项目, 操作)

使用可选的操作将项目压入栈中,并可选地对每个元素应用一组属性。 项目是一组元素。每个元素可以是Item组件url,之后可以跟一个可选的属性参数(见下文)。返回成为当前的项目(最后一个项目)。

StackView会自动创建实例,如果压入的元素是组件url,并且实例在从栈中移除时会销毁。有关更多信息,请参阅项目所有权

可选属性参数紧跟在每个项目之后,并指定初始属性值的映射。对于动态创建的项目,这些值在创建最终确定之前应用。这比创建后设置属性值更有效,特别是在定义大量属性值的情况下,并且还可以在项目创建之前设置属性绑定(使用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
])

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

如果没有提供操作,则使用 PushTransition

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

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

此方法是在 Qt 6.7 版本中引入的。

另请参阅 initialItempushItemPushing Items


Item replace(目标项目属性操作)

使用指定的项目和可选的操作替换栈中的一个或多个项目,并可选地对项目应用一组属性。项目可以是Item组件url。返回成为当前的项目。

只会有 StackView 自己创建的项(从一个 ComponentURL)在弹出时被销毁。有关更多信息,请参阅 项所有者

如果指定了目标参数,则会将所有直到目标项目的项目替换。如果目标null,则替换栈中的所有项目。如果要替换的项目未指定,则仅替换最顶部的项目。

StackView会自动创建实例,如果替换的项目是组件url。可选的属性参数指定用于替换项的初始属性值的映射。对于动态创建的项目,这些值在创建最终确定之前应用。这比创建后设置属性值更有效,特别是在定义大量属性值的情况下,并且还可以在项目创建之前设置属性绑定(使用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"}])

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作(自 QtQuick.Controls 2.1 版本以来)。
StackView.ReplaceTransition具有替换过渡的操作(自 QtQuick.Controls 2.1 版本以来)。
StackView.PopTransition具有弹出过渡的操作(自 QtQuick.Controls 2.1 版本以来)。

如果没有提供操作,栈为空时将使用Immediate,否则使用ReplaceTransition

以下示例说明了使用replace()与推入和弹出过渡一起使用的方法。

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() 和 替换项目


[自 6.7 开始] Item replaceCurrentItem(items, operation)

从堆栈中弹出 currentItem 并推送 items。如果指定了可选的 operation,将使用相关的过渡效果。每个项目可以后面跟一个可选项的属性集,这些属性将应用于该项目。返回成为当前的项目。

可选属性参数紧跟在每个项目之后,并指定初始属性值的映射。对于动态创建的项目,这些值在创建最终确定之前应用。这比创建后设置属性值更有效,特别是在定义大量属性值的情况下,并且还可以在项目创建之前设置属性绑定(使用Qt.binding())。

只会有 StackView 自己创建的项(从一个 ComponentURL)在弹出时被销毁。有关更多信息,请参阅 项所有者

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

如果未提供操作,将使用 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() 和 替换项目


[自 6.7 开始] Item replaceCurrentItem(item, properties, operation)

此函数是 replaceCurrentItem() 的重载。

从堆栈中弹出 currentItem 并推送 item。如果指定了可选的 operation,将使用相关的过渡效果。如果指定了可选的 properties,它们将应用于项目。返回成为当前的项目。

只会有 StackView 自己创建的项(从一个 ComponentURL)在弹出时被销毁。有关更多信息,请参阅 项所有者

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

如果未提供操作,将使用 ReplaceTransition

要向堆栈中推送多个项目,请使用 replaceCurrentItem(items, operation)。

此方法是在 Qt 6.7 版本中引入的。

另请参阅替换项目


[自 6.7 开始] Item replaceCurrentItem(component, properties, operation)

此函数是 replaceCurrentItem() 的重载。

从堆栈中弹出 currentItem 并推送 component。如果指定了可选的 operation,将使用相关的过渡效果。如果指定了可选的 properties,它们将应用于项目。返回成为当前的项目。

只会有 StackView 自己创建的项(从一个 ComponentURL)在弹出时被销毁。有关更多信息,请参阅 项所有者

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

如果未提供操作,将使用 ReplaceTransition

要向堆栈中推送多个项目,请使用 replaceCurrentItem(items, operation)。

此方法是在 Qt 6.7 版本中引入的。

另请参阅替换项目


[自 6.7 开始] Item replaceCurrentItem(url, properties, operation)

此函数是 replaceCurrentItem() 的重载。

从堆栈中弹出 currentItem 并推送 url。如果指定了可选的 operation,将使用相关的过渡效果。如果指定了可选的 properties,它们将应用于项目。返回成为当前的项目。

只会有 StackView 自己创建的项(从一个 ComponentURL)在弹出时被销毁。有关更多信息,请参阅 项所有者

可以可选地指定最后一个参数作为 操作。支持的操作包括:

常量描述
StackView.Immediate无过渡的立即操作。
StackView.PushTransition具有推入过渡的操作。
StackView.ReplaceTransition具有替换过渡的操作。
StackView.PopTransition具有弹出过渡的操作。

如果未提供操作,将使用 ReplaceTransition

要向堆栈中推送多个项目,请使用 replaceCurrentItem(items, operation)。

此方法是在 Qt 6.7 版本中引入的。

另请参阅替换项目


© 2024 Qt 公司有限公司。在此处包含的文档贡献的版权属于各自的所有者。提供的文档是在自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 框架内许可的。Qt 及其相应标志是芬兰及/或全球其他国家的 Qt 公司有限公司的商标。所有其他商标均为各自所有者的财产。