QPropertyAnimation 支持哪些属性进行动画处理?

Posted

技术标签:

【中文标题】QPropertyAnimation 支持哪些属性进行动画处理?【英文标题】:What property supported in QPropertyAnimation to be animated? 【发布时间】:2015-04-15 15:29:25 【问题描述】:

我正在学习 Qt,并认为动画按钮很重要。我正在尝试创建我的自定义 QPushButton 类,该类重新实现鼠标进入和离开事件并使用 qt 动画框架。 QPropertyAnimation

QPropertyAnimation(QObject * target, const QByteArray & propertyName, QObject * parent = 0)

因此,如果我想为其大小设置动画,我可以使用“几何”作为 propertyName 但是当我也想同时更改 文本颜色背景颜色 时,这让我感到困惑......我应该将什么设置为 propertyName?一直在搜索任何地方,但没有找到任何关于我可以为哪些属性设置动画以及它在propertyName 构造函数参数中的命名方式的文档。

预期的答案将是所有可能的参数,例如 QtCore.QPropertyAnimation(self,"geometry") (pyqt4/pyside) 中的“几何”

我使用 PyQt4,但我也可以使用 PySide 和 Qt4.8 C++,所以回答这些库中的任何一个都可以(将全部学习)

编辑:

我发现this one 使用“颜色”,它改变了整个按钮颜色(背景颜色),仍然不知道如何使文本可见并为文本颜色设置动画

【问题讨论】:

【参考方案1】:

文本颜色和背景颜色不是 Qt 属性。所以你不能使用QPropertyAnimation为它们制作动画。

您可以在官方文档的相应部分找到QWidget 属性列表:http://doc.qt.io/qt-4.8/qwidget.html

如果你想动态改变一些任意属性,比如文本颜色,你可以启动一个QTimer并在连接到定时器timeout信号的槽中执行必要的操作。


--更新--

在 C++ Qt 中,您不能为“颜色”属性设置动画,因为没有这样的属性。如果您尝试这样做,您将在控制台中收到以下警告:

QPropertyAnimation: you're trying to animate a non-existing property color of your QObject


作为QVariantAnimation 的子类,QPropertyAnimation 不支持所有QVariant 属性类型。列出了支持的类型in the doc:

并非所有 QVariant 类型都受支持。以下是目前的名单 支持的 QVariant 类型:

诠释 UInt 双 浮动 QLine QLineF QPoint QPointF 尺寸 QSizeF 矩形 QRectF QColor

如果你想为其他类型的属性设置动画,你应该为它注册一个插值函数:

QVariant cursorInterpolator(const QCursor &start, const QCursor &end, qreal progress)

    ...
    return QCursor(...);

...
qRegisterAnimationInterpolator<QCursor>(cursorInterpolator);

【讨论】:

是的,它不是 Qt 属性,但我认为在动画框架中它使用不同类型的属性,因为即使光标是 qt 属性,它也无法为“光标”设置动画。毕竟我可以将哪些可能的值传递给propertyName【参考方案2】:

您可以为您的应用程序添加“颜色”到 Qt 属性系统。只需添加代码

Q_PROPERTY(QColor color READ color WRITE setColor)

在您想要动画的类小部件中,并在类中添加color()setColor() 这两个方法。 并且不要忘记在 settter 中通过update() 进行更新。

【讨论】:

以上是关于QPropertyAnimation 支持哪些属性进行动画处理?的主要内容,如果未能解决你的问题,请参考以下文章

Qt炫酷动画5.QVariantAnimation可变属性类QPropertyAnimation动画属性类

Qt炫酷动画5.QVariantAnimation可变属性类QPropertyAnimation动画属性类

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

QT 控件动态效果之QPropertyAnimation

QT 控件动态效果之QPropertyAnimation

qt:如何使用 QPropertyAnimation 为子 QPushButton 的透明度设置动画?