QPropertyAnimation支持哪些属性动画?

时间:2015-04-15 15:29:26

标签: c++ qt animation pyqt4 pyside

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

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

因此,如果我想为其大小设置动画,我可以使用“geometry”作为propertyName 但是当我想改变文字颜色背景颜色时,它会让我感到困惑......我应该把它作为propertyName?一直在搜索,但没有找到任何关于我可以动画的属性以及如何在propertyName构造函数参数中命名的文档。

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

我使用PyQt4但我可以使用PySide& Qt4.8 C ++也是如此,任何这些库中的答案都可以(将全部学习)

编辑:

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

2 个答案:

答案 0 :(得分:1)

文字颜色和背景颜色不是Qt属性。因此,您无法使用QPropertyAnimation为其设置动画。

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

如果要动态更改某些任意属性(如文本颜色),可以启动QTimer并在连接到计时器timeout信号的插槽中执行必要的操作。

<小时/> --upd -

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

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

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

  

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

     

Int   UInt
  双
  浮动
  QLine
  QLineF
  QPoint
  QPointF
  QSize
  QSizeF
  QRect
  QRectF
  的QColor

如果要为其他类型的属性设置动画,则应为其注册插值函数:

QVariant cursorInterpolator(const QCursor &start, const QCursor &end, qreal progress)
{
    ...
    return QCursor(...);
}
...
qRegisterAnimationInterpolator<QCursor>(cursorInterpolator);

答案 1 :(得分:1)

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

Q_PROPERTY(QColor color READ color WRITE setColor)

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