QML 中的 StackView 替代方案

StackView alternative in QML

到目前为止,我一直在使用 QML 中的 StackView 从一个屏幕转到另一个屏幕。但我发现也可以只创建不同的项目,将其设置为可见或不可见,以使用新视图更新屏幕。例如,我可以有一个页眉、一个设置为可见的主要项目 (Item1) 和一个页脚。然后我可以将 Item1 设置为不可见,将 Item2 设置为可见。

我想知道每个解决方案的 advantage/disadvantage 是什么? (StackView VS 视图 visible/invisible)

正如@ddriver 所说,使用StackView 的优点是您不必全部自己完成。我怀疑不使用 StackView(如果您使用 StackView 的话)所获得的性能优势是否会超过代码可读性的下降。如果我不得不维护你的代码并且看到你在自己做,我会问的第一个问题是你为什么不直接使用 StackView.

  • 过渡:您必须为每个页面维护动画,您可以通过 StackView 免费获得 - 例如,它们默认存在,您无需编写一行代码获得好看的动画。
  • 可见性:您可能必须为每个页面创建一个索引,并将其与 currentIndex 属性 进行比较,例如你的 main.qml 文件。给每个 "page" 一个索引,并为每个项目设置 visible: index == currentIndex。您必须确保在 动画(如果有的话)之后发生这种情况。
  • 内存:StackView 的典型用例是推送 Components,项目从中被 StackView 实例化和管理。如果您有很多复杂的页面,如果您不在它们不可见时销毁它们,这 可能会 影响性能。

I could have for example a header, a main item (Item1) set to visible and a footer.

Page and ApplicationWindow也有这个功能。

如果您将其作为学习练习进行,请务必使用自定义实现。

如果您的目标是获得可靠的(StackView 已自动测试并暴露于 public)成品,请使用 StackView