Q属性QWidgets "visible" 属性 的动画只能以一种方式工作
QPropertyAnimation for the "visible" Property of QWidgets only works one way
我有一个任务需要执行一系列 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。
这是我从 Qt 支持中得到的答案:
bool is not interpolatable type which results in invalid QVariant, which just
happens to convert to false, so boolean properties can never be set to true by
default.[..]
It is probably better to make your own QAbstractAnimation subclass which just
sets the property to new value. However, you can of course define your
interpolation function for bool for it. For example:
static QVariant bool_interpolator(const bool& from, const bool& to, qreal
progress) { return progress < 0.5 ? from : to; }
...
qRegisterAnimationInterpolator(bool_interpolator);
我用插值器测试了解决方案,它完全按照我的需要工作。
我有一个任务需要执行一系列 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。
这是我从 Qt 支持中得到的答案:
bool is not interpolatable type which results in invalid QVariant, which just happens to convert to false, so boolean properties can never be set to true by default.[..]
It is probably better to make your own QAbstractAnimation subclass which just sets the property to new value. However, you can of course define your interpolation function for bool for it. For example:
static QVariant bool_interpolator(const bool& from, const bool& to, qreal progress) { return progress < 0.5 ? from : to; } ... qRegisterAnimationInterpolator(bool_interpolator);
我用插值器测试了解决方案,它完全按照我的需要工作。