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动画属性类