2014-01-23 50 views
7

我被要求爲可能位於android和iOS上的客戶端(首先專注於iOS)創建一個應用程序。所以我認爲Qt可能是答案。我想使用Qt Quick來創建應用程序,但我似乎無法找到一種有效處理多個頁面的方法,因此請記住,每個頁面都可能相當重量級。QML中的多頁面應用程序

到目前爲止,我已經試過:

  • 分頁與裝載機,即在需要的屏幕動態牽引。這可行,但第一次加載屏幕時會有明顯的延遲
  • 使每個頁面成爲一個組件並只顯示必要的屏幕。這會在啓動時加載所有頁面,內存太重
  • 使每個頁面成爲組件並通過ListView顯示它們。與上面相同的問題。

必須有一箇中間地帶,視圖基本上可以像原生iOS應用程序一樣進入低內存模式。歡迎任何建議。

注:屏幕的發展不一定是線性的

+0

您是否嘗試過切換狀態? – Kakadu

+0

@Kakadu當你說切換狀態你是什麼意思? –

+0

這些狀態:http://qt-project.org/doc/qt-5.0/qtquick/qtquick-statesanimations-states.html – Kakadu

回答

2

我與QML的經驗是相當有限的,但是從其他UX經驗,我會想辦法解決會涉及重新分解你的網頁來利用Loader項目爲他們內心的孩子/組件。從我讀的內容來看,您聽起來像是在每個頁面上使用Loader項目。

例如,當你的程序開始加載你的頁面時,它應該在內存上很亮,否則還有很多大型組件需要動態加載。

當用戶提供輸入以進入特定頁面時,您應該像通常那樣進行動畫/顯示,不應該延遲。頁面本身應該使用Loader項目,用於需要加載的每個組件(即具有大內存佔用的組件)。

組件加載時,您可以顯示進度條/輪子動畫。一旦組件通過onLoaded signal完成加載,您可以隱藏進度條/滾輪。

您可能還想查看Loader項目的asynchronous property,以確保組件負載避免毛刺時的任何動畫(即進度條/輪子)。

最後,當頁面需要隱藏時,只需將每個Loader項目的active property設置爲false,並且它應該釋放加載的組件。

希望能夠幫助你,而不是重複你已經嘗試過的東西。

+0

感謝您的回覆。這幾乎是我試過的,加載頁面時顯示加載對話框是一個非常糟糕的用戶體驗。我不需要爲原生iOS應用程序執行此操作,而這正是我想要模擬的,即您將從本機應用程序獲得的相同類型的用戶體驗。它可能是在移動平臺上相當新的框架的產品,一個體面的分頁策略還不存在!? –

+0

我已經使用了幾個iOS應用程序,這些應用程序在加載頁面時需要時間並在選擇選項後顯示進度動畫。我認爲延遲顯示頁面內容的同時加載組件或獲取數據的情況並不罕見。 :)希望項目進展順利! – Matthew

+0

乾杯。我可以理解,如果有一個http請求或者是加載數據的東西,但是對於沒有網絡依賴性的本地應用程序,UI加載是非常即時的。我想我會看看自己編寫的一個分頁框架,它非常具有動態性,但足夠聰明,可以知道哪些視圖保留在內存中,哪些不保留。如果我這樣做,我會在這裏再次查看,同時,歡迎任何其他建議! –

0

老問題,但Qt.ControlsStackView支持推動和彈出與各種動畫。

正如前面的答案指出的那樣,使用Loader也是一種選擇,但它不會讓您輕鬆地改變動畫(當更改視圖時,新舊不可同時使用,因此您無法做到很好的動畫)。

另一種方法是使用Component s,懶洋洋地實例化視圖併爲轉換設置動畫效果。查看QtWS 2015演講中的示例,幻燈片和代碼available here