Понадобилось, что бы перед началом анимации была задержка — например, что бы подсказка не всплывала, если курсор просто мимо пролетал.
Обычно, это делается через Timer или добавлением промежуточной анимации. Мне же хотелось ограничится behavior и лишь одной анимацией, что бы не геммороиться с запуском таймеров и т.п.
Решение оказалось довольно простым, достаточно использовать сплайн из двух кривых Безье, которые фактически представляет собой пару отрезков (линейных кривых Безье) и вместе выглядят вот так: «_/»
...
visible: opacity>0
opacity: myButton.containsMouse? 1 : 0
Behavior on opacity {
NumberAnimation {
duration: 600
easing.type: Easing.BezierSpline
easing.bezierCurve: [0.8,0, 0.8,0, 0.8,0, 1,1, 1,1, 1,1] //-- 80% времени ждём (480 мс), потом линейно (120 мс)
}
}
...
Можно изменить 0.8 — это процент ожидания от duration. Основная строчка это easing.bezierCurve: [], в которой мы задаём две кривых Безье, в каждой три параы координат — две контрольные точки и конечная. Конечная обязаны быть в (1, 1), иначе Qt выдаст ошибку, что не валидное значение.
Результат:
Вот как-то так =)