在哪里保存 QWidget 动画的状态以便在 QStyle 绘制函数中使用?
Where to save the state of QWidget animations for use in QStyle draw functions?
一个QWidget
作为一个paintEvent
函数负责他的绘图。为了正确实现这个功能,用一个QStyle
对象来表示每个组件,用一个QStyleOption
对象来保存控件的状态。
例如:自定义 ScrollBar
实现他的 paintEvent
,它调用 drawComplexControl
并使用选项“CC_ScrollBar
”。然后,可以扩展 QProxyStyle
以更改滚动条的外观。
当用户悬停滑块时,调用 paintEvent
应用新的 "hovered" 外观,该状态保存在 QStyleOption::state
中。但是对于现在一天的小部件,这种状态不应该立即更新,而是在大约 100-500 毫秒内平滑过渡(动画)。为了使用此转换为小部件设置动画,需要一些值,例如滚动的每个部分的动画的当前状态(qreal
/QColor
?):顶部箭头、底部箭头或滑块.
经过这个"long"的介绍,我的问题来了:
有没有变量可以设置这个动画的状态?我可以用这个新值扩展 QStyleOption
,但当前的实现似乎已经包含动画,我无法找到保存此过渡状态的位置。
我正在寻找规范的答案。
注意:为避免"possible duplicate of...",即使稍微相关,这也不是关于如何使用 QAnimation 或创建自定义 Widget 的问题。
样式动画派生自私有 QStyleAnimation
(#include "qstyleanimation_p.h"
),它们是 QAbstractAnimation
,因此是 QObject
。比如滚动条样式的动画就是QScrollbarStyleAnimation
.
下面是 Windows 样式的 drawControl
获取动画指针的方式:
if (QProgressStyleAnimation *animation =
qobject_cast<QProgressStyleAnimation*>(d->animation(opt->styleObject)))
各种样式对象的动画由样式 PIMPL's animation
、startAnimation
和 stopAnimation
方法管理。定义这些方法的基础 PIMPL 是 QCommonStylePrivate
(#include <private/qcommonstyle_p.h>
).
您可以按照自己的风格使用它:
从 QCommonStyle
中获取你的风格,使用 PIMPL 惯用法,并从 QCommonStylePrivate
中获取你的 pimpl。我 documented the Qt's PIMPL idiom 让它更容易。
重用现有样式动画之一 类,或使用从 QStyleAnimation
.
派生的样式
利用 QCommonStyle
PIMPL 的方法来管理动画。不过,您首先要创建动画实例。
一个QWidget
作为一个paintEvent
函数负责他的绘图。为了正确实现这个功能,用一个QStyle
对象来表示每个组件,用一个QStyleOption
对象来保存控件的状态。
例如:自定义 ScrollBar
实现他的 paintEvent
,它调用 drawComplexControl
并使用选项“CC_ScrollBar
”。然后,可以扩展 QProxyStyle
以更改滚动条的外观。
当用户悬停滑块时,调用 paintEvent
应用新的 "hovered" 外观,该状态保存在 QStyleOption::state
中。但是对于现在一天的小部件,这种状态不应该立即更新,而是在大约 100-500 毫秒内平滑过渡(动画)。为了使用此转换为小部件设置动画,需要一些值,例如滚动的每个部分的动画的当前状态(qreal
/QColor
?):顶部箭头、底部箭头或滑块.
经过这个"long"的介绍,我的问题来了:
有没有变量可以设置这个动画的状态?我可以用这个新值扩展 QStyleOption
,但当前的实现似乎已经包含动画,我无法找到保存此过渡状态的位置。
我正在寻找规范的答案。
注意:为避免"possible duplicate of...",即使稍微相关,这也不是关于如何使用 QAnimation 或创建自定义 Widget 的问题。
样式动画派生自私有 QStyleAnimation
(#include "qstyleanimation_p.h"
),它们是 QAbstractAnimation
,因此是 QObject
。比如滚动条样式的动画就是QScrollbarStyleAnimation
.
下面是 Windows 样式的 drawControl
获取动画指针的方式:
if (QProgressStyleAnimation *animation =
qobject_cast<QProgressStyleAnimation*>(d->animation(opt->styleObject)))
各种样式对象的动画由样式 PIMPL's animation
、startAnimation
和 stopAnimation
方法管理。定义这些方法的基础 PIMPL 是 QCommonStylePrivate
(#include <private/qcommonstyle_p.h>
).
您可以按照自己的风格使用它:
从
QCommonStyle
中获取你的风格,使用 PIMPL 惯用法,并从QCommonStylePrivate
中获取你的 pimpl。我 documented the Qt's PIMPL idiom 让它更容易。重用现有样式动画之一 类,或使用从
QStyleAnimation
. 派生的样式
利用
QCommonStyle
PIMPL 的方法来管理动画。不过,您首先要创建动画实例。