2016-09-23 63 views
2

我是一名C++開發人員,現在正在研究在QtQuick中使用QML進行GUI開發。GUI屏幕轉換如何在qml中工作

在GUI創建中,用戶只能看到一個屏幕。 並基於用戶交互,切換屏幕。 但是背後究竟發生了什麼?

關於如何設計一個單一屏幕的信息很多,但對於如何管理其狀態轉換的資源卻非常少。

是,新的屏幕建成,裝老被銷燬啓動應用程序並更改圖層順序顯示,一旦畫面時加載所有屏幕和組件,

或用戶操作後

(一次只有一個屏幕在內存中)

這種類型的處理的術語是什麼。

這將是非常有用的指向我可以找到這樣的信息。

如果您不明白我的問題,請告訴我。我會重寫!

回答

1

有可用的一個方便的現成的解決方案: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

2

一個可能的選項,使用狀態不同屏幕之間切換:

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 
      } 
     } 
    ] 
} 
2

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

實施例:

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