2015-08-20 3 views
6

Невозможно переключить анимацию с одного объекта на другой. Идентификатор изменяется (он печатает «мир» в журнале), но он не передает анимацию: hello все еще мигает и world является статическим.Изменение цели анимации

Он работает правильно только при звонке a.restart(). Когда нет функций, просто привязки, вы можете использовать onChanged и контролировать, как анимация останавливается (завершается или приостанавливается) if (running) { complete(); restart(); }.

import QtQuick 2.5 

Column { 
    ColorAnimation { 
     id: a 

     target: lab1 
     property: "color" 

     running: true 
     loops: Animation.Infinite 
     duration: 500 

     from: "black" 
     to: "red" 
    } 

    Text { 
     id: lab1 

     text: "hello" 

     MouseArea { 
      anchors.fill: parent 
      onClicked: { 
       a.target = lab2 
       console.log("changed") 
       console.log(a.target.text) 
      } 
     } 
    } 

    Text { 
     id: lab2 

     text: "world" 
    } 
} 
+1

Это выглядит как ошибка (или, по крайней мере, проблема с документацией), поэтому отправьте отчет об ошибке в файле bugreports.qt.io. – cmannett85

ответ

1

Я буду использовать это сейчас (только что добавили onTargetChanged):

import QtQuick 2.5 

Column { 
    ColorAnimation { 
     id: a 

     target: lab1 

     onTargetChanged: { 
      if (running) { complete(); restart(); } 
     } 

     property: "color" 

     running: true 
     loops: Animation.Infinite 
     duration: 500 

     from: "black" 
     to: "red" 
    } 

    Text { 
     id: lab1 

     text: "hello" 

     MouseArea { 
      anchors.fill: parent 
      onClicked: { 
       a.target = lab2 
       console.log("changed") 
       console.log(a.target.text) 
      } 
     } 
    } 

    Text { 
     id: lab2 

     text: "world" 
    } 
} 

И с привязкой (анимация переключается на другую метку при нажатии):

import QtQuick 2.5 

Column { 
    id: root 

    ColorAnimation { 
     id: a 

     target: ma.pressed ? lab2 : lab1 

     onTargetChanged: { 
      if (running) { complete(); restart(); } 
     } 

     property: "color" 

     running: true 
     loops: Animation.Infinite 
     duration: 500 

     from: "black" 
     to: "red" 
    } 

    Text { 
     id: lab1 

     text: "hello" 

     MouseArea { 
      id: ma 
      anchors.fill: parent 
     } 
    } 

    Text { 
     id: lab2 

     text: "world" 
    } 
} 
+0

работает 'restart()' отлично работает. благодаря –

1

Вы должны остановить анимацию перед изменением цели:

a.running = false 
a.target = lab2 
a.running = true 

Он отлично работает для меня

+0

В привязке нет возможности сделать это. – Velkan

+0

Что значит? Вы просто можете заменить «a.target = lab2» моим кодом, и все. – folibis

+0

Посмотрите на вторую часть ответа с помощью 'onTargetChanged'. Нет никакого 'onClick', чтобы наклеить код там. И у моего фактического проекта нет 'onClick'. – Velkan

Смежные вопросы