2015-07-04 37 views

Odpowiedz

3

Jest to jeden ze sposobów, aby to zrobić:

import QtQuick 2.4 
import QtQuick.Window 2.0 

Window { 
    id: window 
    width: 400 
    height: 400 
    visible: true 

    Loader { 
     id: loader 
     onSourceChanged: animation.running = true 

     NumberAnimation { 
      id: animation 
      target: loader.item 
      property: "x" 
      from: 0 
      to: window.width - loader.item.width 
      duration: 1000 
      easing.type: Easing.InExpo 
     } 
    } 

    // Replace this with some other action that changes the source. 
    Component.onCompleted: loader.source = "MyRectangle.qml" 
} 

MyRectangle.qml:

import QtQuick 2.0 

Rectangle { 
    id: rect 
    color: "red" 
    width: 150 
    height: 150 
} 
+0

Dzięki. To działa, chociaż nie było tak miłe, jak myślałem. Nie jest to miłe podejście do dodawania animacji do komponentu programu ładującego. Czasami działa szybciej, a inne wolniej iz denerwującym opóźnieniem! Dzięki i tak. –

+1

Możesz spróbować zmienić 'onSourceChanged' na' onStatusChanged' i uruchomić animację tylko wtedy, gdy 'status' to' Loader.Ready'? Bez kodu służącego do powielania powolności trudno jest zaoferować więcej porad. Możesz wkleić uproszczoną (ale wciąż "ciężką") wersję elementu ładowanego przez 'Loader', dzięki czemu mogę go wypróbować. – Mitch

3

Czy jest obowiązkowe użycie Loader?

Jeśli nie, możesz użyć StackView (oczywiście o głębokości 1, jeśli nie chcesz zaoferować bardziej złożonej nawigacji) i załadować swoje komponenty, przesuwając je na stosie za pomocą zestawu opcji replace na prawdę.

Mimo to, można uzyskać wynik prosicie w następujący sposób:

StackView { 
    delegate: StackViewDelegate { 
     function transitionFinished(properties) { 
      properties.exitItem.x = 0 
     } 

     pushTransition: StackViewTransition { 
      PropertyAnimation { 
       target: enterItem 
       property: "x" 
       from: enterItem.width 
       to: 0 
      } 

      PropertyAnimation { 
       target: exitItem 
       property: "x" 
       from: 0 
       to: -exitItem.width 
      } 
     } 
    } 
} 

przepraszam jeśli to nie działa, jak jest (choć powinno), ale jestem na telefon komórkowy telefon i nie możemy go teraz przetestować.

+0

Nie mogę użyć tej alternatywy. Użyłem komponentu Loader do stworzenia niestandardowego widoku Tab. Nie jest możliwe użycie widoku stosu w moim przypadku, ponieważ muszę zmienić tylko zawartość Tab, nie całą stronę. w końcu był przydatny dla kogoś, kto woli widok stosu. Dzięki za odpowiedź. –

+0

@ a.toraby Nawet myśl, że jestem spóźniony, po prostu nie rób StackView głównym elementem! –