2016-11-14 10 views
0

У меня есть задача: мне нужно выполнить последовательность PropertyAnimations. Одна из анимаций - изменение видимости QWidget. Когда я пытаюсь это скрыть, он отлично работает:QPropertyAnimation для «видимого» свойства QWidgets работает только в одном направлении

QPropertyAnimation *pAnim = new QPropertyAnimation(pWidget, "visible"); 
pAnim->setStartValue(true); 
pAnim->setEndValue(false); 
pAnim->start(QAbstractAnimation::DeleteWhenStopped); 

Но когда я пытаюсь это наоборот, ничего не происходит:

QPropertyAnimation *pAnim = new QPropertyAnimation(pWidget, "visible"); 
pAnim->setStartValue(false); 
pAnim->setEndValue(true); 
pAnim->start(QAbstractAnimation::DeleteWhenStopped); 

я делаю что-то не так? Или это может быть ошибкой в ​​Qt? Я использую Qt 5.6.1, если это помогает.

ответ

0

Вот ответ, который я получил от поддержки Qt:

BOOL не интерполируемый типа, который приводит к недопустимой QVariant, который только происходит преобразовать в ложь, так логические свойства не могут быть установлены на истинный по умолчанию. [..]

Возможно, лучше сделать свой собственный подкласс QAbstractAnimation, который только устанавливает свойство в новое значение. Тем не менее, вы можете, конечно, определить свою интерполяционную функцию для нее. Например:

статического QVariant bool_interpolator (сопзИте BOOL & из, сопзИте BOOL & до, qreal прогресса) {вернуть прогресс < 0,5? от до; } ... qRegisterAnimationInterpolator (bool_interpolator);

Я протестировал решение с помощью интерполятора, и он работал именно так, как мне было нужно.

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

  • Нет связанных вопросов^_^