【问题标题】:StackView alternative in QMLQML 中的 StackView 替代方案
【发布时间】:2016-08-30 12:14:15
【问题描述】:

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

我想知道每种解决方案的优点/缺点是什么? (StackView VS 视图可见/不可见)

【问题讨论】:

  • 优点是你可以完全控制行为,缺点是你必须实现行为。
  • AFAIK StackView 的主要优势在于,当您想要拥有一堆视图时,您可以在其中返回。如果您只想拥有多个并行的视图,那么这可能不是您所需要的。如果您有大量复杂的无状态视图,则使用加载器而不是“可见/不可见”方法可能更有益。

标签: qt qml qtquickcontrols2


【解决方案1】:

正如@ddriver 所说,使用StackView 的好处是您不必自己做所有事情。我怀疑不使用 StackView(如果你有的话)所获得的性能优势将超过代码可读性的下降。如果我必须维护你的代码并且看到你自己在做,我要问的第一个问题是你为什么不直接使用StackView

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

例如,我可以有一个页眉、一个设置为可见的主要项目 (Item1) 和一个页脚。

PageApplicationWindow 也有这个功能。

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

如果您的目标是获得可靠的(StackView 已通过自动测试并向公众公开)成品,请使用StackView

【讨论】:

  • Stackview 的问题是,如果你想在页面之间随机切换,你不能轻易地切换到已经实例化的页面。如果你push()第1页,然后第2页,再第1页,你创建了一个新的第1页,所有存储在第1页的信息都将丢失。
  • @Bersan 如果您推送现有的Item,则不会:doc.qt.io/qt-6/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 2015-03-03
  • 2015-09-25
  • 2019-12-16
相关资源
最近更新 更多