StackView QML 类型
提供基于堆栈的导航模型。 更多...
导入说明 | import QtQuick.Controls |
继承 |
属性
- busy : bool
- currentItem : Item
- depth : int
- empty : bool
(自 QtQuick.Controls 2.3 (Qt 5.10) 以来)
- initialItem : var
- popEnter : Transition
- popExit : Transition
- pushEnter : Transition
- pushExit : Transition
- replaceEnter : Transition
- replaceExit : Transition
附加属性
附加信号
- 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]
。
通过弹出操作逆序项
有时,需要回退到堆栈中的多个步骤。例如,返回到应用程序中的“主”项或某种类型的部分项。在这种情况下,可以将项作为 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 属性分配不同的 pushEnter、pushExit、popEnter、popExit、replaceEnter 和 replaceExit 属性来自定义。
注意:转场动画会影响彼此的转场行为。仅自定义其中一个而忽略其他可能给出意外结果。
以下片段定义了一个简单的淡入淡出转场动画,用于推送和弹出操作
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 的实例化为例如对话框,将不会按预期工作
在这种情况下确保 StackView 有大小有几种方法
- 在 StackView 本身上设置 implicitWidth 和 implicitHeight。
- 在 矩形 上设置 implicitWidth 和 implicitHeight。
- 在对话框上设置 contentWidth 和 contentHeight。
- 为对话框设置大小。
另请参阅自定义 StackView,使用 StackView 进行导航,导航控件,容器控件,以及 Qt Quick Controls 中的焦点管理。
属性文档
busy : bool |
此属性表示是否有一个转换正在进行。
currentItem : Item |
此属性表示栈中最上层的项。
depth : int |
此属性表示当前已推入栈中的项数量。
empty : bool |
initialItem : var |
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 |
该附加属性保存所附加项的可见性。值遵循 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) 中引入。
附加信号文档
|
当所附加项在堆栈中激活时,会发出此附加信号。
注意: 对应的处理程序是 onActivated
。
该信号自 QtQuick.Controls 2.1 (Qt 5.8) 中引入。
另请参见 status。
|
当所附加项在堆栈中被激活的过程中,会发出此附加信号。
注意: 对应的处理程序是 onActivating
。
该信号自 QtQuick.Controls 2.1 (Qt 5.8) 中引入。
另请参见 status。
|
当所附加项在堆栈中被停用,会发出此附加信号。
注意: 对应的处理程序是 onDeactivated
。
该信号自 QtQuick.Controls 2.1 (Qt 5.8) 中引入。
另请参见 status。
|
当所附加项在堆栈中被停用的过程中,会发出此附加信号。
注意: 对应的处理程序是 onDeactivating
。
该信号自 QtQuick.Controls 2.1 (Qt 5.8) 中引入。
另请参见 status。
|
方法文档
void clear(transition) |
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 自己创建的项(从一个 Component 或 URL)在弹出时被销毁。有关更多信息,请参阅 项所有者。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
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,则请使用强类型化的 popToItem、popToIndex 或 popCurrentItem 函数。
另请参阅:clear()、移除项目 和 通过 pop 还原项目。
|
从栈中移除 currentItem。返回从栈中移除的最后一个项目,如果 depth 是 1
则返回 null
。
只会有 StackView 自己创建的项(从一个 Component 或 URL)在弹出时被销毁。有关更多信息,请参阅 项所有者。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
StackView.Immediate | 无过渡的立即操作。 |
StackView.PushTransition | 具有推入过渡的操作。 |
StackView.ReplaceTransition | 具有替换过渡的操作。 |
StackView.PopTransition | 具有弹出过渡的操作。 |
如果没有提供操作,将使用 PopTransition
。
此函数等价于 popToIndex(stackView.currentIndex - 1)
。
此方法是在 Qt 6.7 版本中引入的。
另请参阅:clear()、移除项目 和 通过 pop 还原项目。
|
将所有项目弹出到(但不包括)索引。返回从栈中移除的最后一个项目。
如果 索引 超出范围,将产生警告并返回 null
。
只会有 StackView 自己创建的项(从一个 Component 或 URL)在弹出时被销毁。有关更多信息,请参阅 项所有者。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
StackView.Immediate | 无过渡的立即操作。 |
StackView.PushTransition | 具有推入过渡的操作。 |
StackView.ReplaceTransition | 具有替换过渡的操作。 |
StackView.PopTransition | 具有弹出过渡的操作。 |
如果没有提供操作,将使用 PopTransition
。
stackView.popToIndex(stackView.depth - 2, StackView.Immediate)
此方法是在 Qt 6.7 版本中引入的。
另请参阅:clear()、移除项目 和 通过 pop 还原项目。
|
将所有项目弹出到(但不包括)item。返回从栈中移除的最后一个项目。
如果 item 是 null
,将产生警告并返回 null
。
只会有 StackView 自己创建的项(从一个 Component 或 URL)在弹出时被销毁。有关更多信息,请参阅 项所有者。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
StackView.Immediate | 无过渡的立即操作。 |
StackView.PushTransition | 具有推入过渡的操作。 |
StackView.ReplaceTransition | 具有替换过渡的操作。 |
StackView.PopTransition | 具有弹出过渡的操作。 |
如果没有提供操作,将使用 PopTransition
。
stackView.popToItem(someItem, StackView.Immediate)
此方法是在 Qt 6.7 版本中引入的。
另请参阅:clear()、移除项目 和 通过 pop 还原项目。
Item push(item, properties, operation) |
使用可选的 operation 将 item 推送到栈上,并可选地应用一系列 properties 到该项目上。项目可以是 Item、Component 或 url。返回成为当前项目的项。
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"}])
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
StackView.Immediate | 无过渡的立即操作。 |
StackView.PushTransition | 具有推入过渡的操作(自 QtQuick.Controls 2.1 版本以来)。 |
StackView.ReplaceTransition | 具有替换过渡的操作(自 QtQuick.Controls 2.1 版本以来)。 |
StackView.PopTransition | 具有弹出过渡的操作(自 QtQuick.Controls 2.1 版本以来)。 |
如果没有提供操作,如果栈为空,则使用 Immediate
,否则使用 PushTransition
。
注意:已存在于栈中的项目不会被推送。
也请参阅:initialItem 和 Pushing Items。
|
将 item 推送到栈上,可选地应用一组 properties,使用可选的 operation。返回成为当前的项目(最后一个项目)。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
StackView.Immediate | 无过渡的立即操作。 |
StackView.PushTransition | 具有推入过渡的操作。 |
StackView.ReplaceTransition | 具有替换过渡的操作。 |
StackView.PopTransition | 具有弹出过渡的操作。 |
如果没有提供操作,则使用 PushTransition
。
要推送多个项目到栈上,请使用 pushItems 方法。
此方法是在 Qt 6.7 版本中引入的。
也请参阅:initialItem 和 Pushing Items。
|
此函数覆盖了 pushItem()。
将 component 推送到栈上,可选地应用一组 properties,使用可选的 operation。返回成为当前的项目(最后一个项目)。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
StackView.Immediate | 无过渡的立即操作。 |
StackView.PushTransition | 具有推入过渡的操作。 |
StackView.ReplaceTransition | 具有替换过渡的操作。 |
StackView.PopTransition | 具有弹出过渡的操作。 |
如果没有提供操作,则使用 PushTransition
。
要推送多个项目到栈上,请使用 pushItems 方法。
此方法是在 Qt 6.7 版本中引入的。
也请参阅:initialItem 和 Pushing Items。
|
此函数覆盖了 pushItem()。
将 url 推送到栈上,可选地应用一组 properties,使用可选的 operation。返回成为当前的项目(最后一个项目)。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
StackView.Immediate | 无过渡的立即操作。 |
StackView.PushTransition | 具有推入过渡的操作。 |
StackView.ReplaceTransition | 具有替换过渡的操作。 |
StackView.PopTransition | 具有弹出过渡的操作。 |
如果没有提供操作,则使用 PushTransition
。
要推送多个项目到栈上,请使用 pushItems 方法。
此方法是在 Qt 6.7 版本中引入的。
也请参阅:initialItem 和 Pushing Items。
|
使用可选的操作将项目压入栈中,并可选地对每个元素应用一组属性。 项目是一组元素。每个元素可以是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 版本中引入的。
另请参阅 initialItem、pushItem和Pushing Items。
Item replace(目标,项目,属性,操作) |
使用指定的项目和可选的操作替换栈中的一个或多个项目,并可选地对项目应用一组属性。项目可以是Item、组件或url。返回成为当前的项目。
只会有 StackView 自己创建的项(从一个 Component 或 URL)在弹出时被销毁。有关更多信息,请参阅 项所有者。
如果指定了目标参数,则会将所有直到目标项目的项目替换。如果目标是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函数。
|
从堆栈中弹出 currentItem 并推送 items。如果指定了可选的 operation,将使用相关的过渡效果。每个项目可以后面跟一个可选项的属性集,这些属性将应用于该项目。返回成为当前的项目。
可选属性参数紧跟在每个项目之后,并指定初始属性值的映射。对于动态创建的项目,这些值在创建最终确定之前应用。这比创建后设置属性值更有效,特别是在定义大量属性值的情况下,并且还可以在项目创建之前设置属性绑定(使用Qt.binding())。
只会有 StackView 自己创建的项(从一个 Component 或 URL)在弹出时被销毁。有关更多信息,请参阅 项所有者。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
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" } ])
要推送单个项目,请使用相关的重载
- replaceCurrentItem(item, properties, operation)
- replaceCurrentItem(component, properties, operation)
- replaceCurrentItem(url, properties, operation)
此方法是在 Qt 6.7 版本中引入的。
|
此函数是 replaceCurrentItem() 的重载。
从堆栈中弹出 currentItem 并推送 item。如果指定了可选的 operation,将使用相关的过渡效果。如果指定了可选的 properties,它们将应用于项目。返回成为当前的项目。
只会有 StackView 自己创建的项(从一个 Component 或 URL)在弹出时被销毁。有关更多信息,请参阅 项所有者。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
StackView.Immediate | 无过渡的立即操作。 |
StackView.PushTransition | 具有推入过渡的操作。 |
StackView.ReplaceTransition | 具有替换过渡的操作。 |
StackView.PopTransition | 具有弹出过渡的操作。 |
如果未提供操作,将使用 ReplaceTransition
。
要向堆栈中推送多个项目,请使用 replaceCurrentItem(items, operation)。
此方法是在 Qt 6.7 版本中引入的。
另请参阅替换项目。
|
此函数是 replaceCurrentItem() 的重载。
从堆栈中弹出 currentItem 并推送 component。如果指定了可选的 operation,将使用相关的过渡效果。如果指定了可选的 properties,它们将应用于项目。返回成为当前的项目。
只会有 StackView 自己创建的项(从一个 Component 或 URL)在弹出时被销毁。有关更多信息,请参阅 项所有者。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
StackView.Immediate | 无过渡的立即操作。 |
StackView.PushTransition | 具有推入过渡的操作。 |
StackView.ReplaceTransition | 具有替换过渡的操作。 |
StackView.PopTransition | 具有弹出过渡的操作。 |
如果未提供操作,将使用 ReplaceTransition
。
要向堆栈中推送多个项目,请使用 replaceCurrentItem(items, operation)。
此方法是在 Qt 6.7 版本中引入的。
另请参阅替换项目。
|
此函数是 replaceCurrentItem() 的重载。
从堆栈中弹出 currentItem 并推送 url。如果指定了可选的 operation,将使用相关的过渡效果。如果指定了可选的 properties,它们将应用于项目。返回成为当前的项目。
只会有 StackView 自己创建的项(从一个 Component 或 URL)在弹出时被销毁。有关更多信息,请参阅 项所有者。
可以可选地指定最后一个参数作为 操作。支持的操作包括:
常量 | 描述 |
---|---|
StackView.Immediate | 无过渡的立即操作。 |
StackView.PushTransition | 具有推入过渡的操作。 |
StackView.ReplaceTransition | 具有替换过渡的操作。 |
StackView.PopTransition | 具有弹出过渡的操作。 |
如果未提供操作,将使用 ReplaceTransition
。
要向堆栈中推送多个项目,请使用 replaceCurrentItem(items, operation)。
此方法是在 Qt 6.7 版本中引入的。
另请参阅替换项目。
© 2024 Qt 公司有限公司。在此处包含的文档贡献的版权属于各自的所有者。提供的文档是在自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 框架内许可的。Qt 及其相应标志是芬兰及/或全球其他国家的 Qt 公司有限公司的商标。所有其他商标均为各自所有者的财产。