0

我有一个任务是我需要执行一系列 PropertyAnimations。其中一个动画是改变 QWidget 的可见性。当我试图隐藏它时,它工作得很好:

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。

4

1 回答 1

0

这是我从 Qt 支持中得到的答案:

bool 不是可插值类型,这会导致无效的 QVariant,它恰好转换为 false,因此默认情况下布尔属性永远不能设置为 true。[..]

制作自己的 QAbstractAnimation 子类可能会更好,它只是将属性设置为新值。但是,您当然可以为它定义 bool 的插值函数。例如:

static QVariant bool_interpolator(const bool& from, const bool& to, qreal progress) { return progress < 0.5 ? 从到; } ... qRegisterAnimationInterpolator(bool_interpolator);

我用插值器测试了这个解决方案,它完全按照我的需要工作。

于 2016-11-17T09:59:11.547 回答