我正在学习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使用“颜色”并且它改变了整个按钮颜色(背景颜色),仍然不知道如何使文本可见&动画文字颜色
答案 0 :(得分:1)
文字颜色和背景颜色不是Qt属性。因此,您无法使用QPropertyAnimation
为其设置动画。
您可以在官方文档的相应部分找到QWidget
属性列表:http://doc.qt.io/qt-4.8/qwidget.html
如果要动态更改某些任意属性(如文本颜色),可以启动QTimer
并在连接到计时器timeout
信号的插槽中执行必要的操作。
在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中进行更新。