QWidgets 的“可见”属性的 QPropertyAnimation 只能以一种方式工作

Posted

技术标签:

【中文标题】QWidgets 的“可见”属性的 QPropertyAnimation 只能以一种方式工作【英文标题】:QPropertyAnimation for the "visible" Property of QWidgets only works one way 【发布时间】:2016-11-14 14:43:49 【问题描述】:

我有一个任务,我需要执行一系列 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。

【问题讨论】:

【参考方案1】:

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

bool 不是导致无效 QVariant 的可插值类型,它只是 碰巧转换为假,所以布尔属性永远不能设置为真 默认。[..]

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

static QVariant bool_interpolator(const bool& from, const bool& to, qreal 进度)返回进度

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

【讨论】:

以上是关于QWidgets 的“可见”属性的 QPropertyAnimation 只能以一种方式工作的主要内容,如果未能解决你的问题,请参考以下文章

不能使用 QWidgets

封装 QWidgets 的正确方法?

自定义形状的 QWidgets 消失

从 QLayout 中删除 QWidgets?

QWidgets可以添加到QWindow吗?

如何将 QWidgets 与菜单栏同步?