GUI屏幕转换如何在qml中工作

问题描述:

我是一名C++开发人员,现在正在研究在QtQuick中使用QML进行GUI开发。GUI屏幕转换如何在qml中工作

在GUI创建中,用户只能看到一个屏幕。 并基于用户交互,切换屏幕。 但是背后究竟发生了什么?

关于如何设计一个单一屏幕的信息很多,但对于如何管理其状态转换的资源却非常少。

是,新的屏幕建成,装老被销毁启动应用程序并更改图层顺序显示,一旦画面时加载所有屏幕和组件,

或用户操作后

(一次只有一个屏幕在内存中)

这种类型的处理的术语是什么。

这将是非常有用的指向我可以找到这样的信息。

如果您不明白我的问题,请告诉我。我会重写!

有可用的一个方便的现成的解决方案:StackView。它为滑动/淡入淡出的页面提供了内置转换。

StackView { 
    id: stack 
    initialItem: Page { 
     Button { 
      text: "Push" 
      anchors.centerIn: parent 
      onClicked: stack.push(Qt.resolvedUrl("OtherPage.qml")) 
     } 
    } 
} 

StackView让你push项目,URL和组件。在推动后两者中的任何一个时,StackView会在适当时自动创建并销毁实例。例如,如果您推送多个URL或组件,则它只会实例化最上面一个成为堆栈中当前项目的那个。一旦您将物品从堆叠中取出,它会在其成为堆叠上当前最顶端的物品时按需创建其下的物品实例。 StackView还允许您在堆栈中使用replace一个或多个项目。在弹出或替换动态创建的项目时,它会在各个转换完成后自动销毁实例。

+0

谢谢你的解释.. –

+0

是否有无论如何在屏幕过渡时关闭动画'Stackview'默认提供? –

+0

是的,您可以传递'StackView.Immediate'作为push(),pop()或replace()的最后一个参数。 – jpnurmi

一个可能的选项,使用状态不同屏幕之间切换:

ColumnLayout { 
    id: controls 

    states: [ 
     State { 
      id: state1 
      name: "STATE1" 

      property list<Item> content: [ 
       Loader { 
        ... 
       }, 
       MyItem { 
        ... 
       } 
      ] 

      PropertyChanges { 
       target: controls 
       children: state1.content 
      } 
     }, 
     State { 
      id: state2 
      name: "STATE2" 

      property list<Item> content: [ 
       MyHud { 
        ... 
       } 
      ] 

      PropertyChanges { 
       target: controls 
       children: state2.content 
      } 
     } 
    ] 
} 

您可以使用Loader加载不同的QML-文件或QML组件。

实施例:

import QtQuick 2.0 
Item { 
    width: 200; height: 200 
    Loader { id: pageLoader } 
    MouseArea { 
     anchors.fill: parent 
     onClicked: pageLoader.source = "Page1.qml" 
    } 
}