【问题标题】:What property supported in QPropertyAnimation to be animated?QPropertyAnimation 支持哪些属性进行动画处理?
【发布时间】: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 使用“颜色”,它改变了整个按钮颜色(背景颜色),仍然不知道如何使文本可见并为文本颜色设置动画

【问题讨论】:

    标签: c++ qt animation pyqt4 pyside


    【解决方案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() 进行更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 2013-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多