5

AQWidget作为paintEvent负责他的绘图的函数。为了正确实现该功能,使用一个QStyle对象来表示每个组件,并使用一个QStyleOption对象来保存控件的状态。

例如:一个自定义ScrollBar实现 his paintEvent,它drawComplexControl使用选项“ CC_ScrollBar”调用。然后,QProxyStyle可以扩展以更改滚动条的外观。

当用户悬停滑块时,paintEvent调用哪个应用新的“悬停”外观,哪个状态保存在QStyleOption::state. 但是对于现在的一天小部件,这个状态不应该立即更新,而是在大约 100-500 毫秒内平滑过渡(动画)。为了使用此转换为小部件设置动画,需要一些值,例如滚动每个部分的动画当前状态 (a qreal/ ?):顶部箭头、底部箭头或滑块。QColor


在这个“长”的介绍之后,我的问题来了:

是否有变量可以设置此动画的状态?我可以使用这个新值进行扩展QStyleOption,但当前的实现似乎已经包含动画,我无法找到这个转换状态的保存位置。

我正在寻找一个规范的答案。

注意:为了避免“可能重复...”,即使稍微相关,这也不是关于如何使用 QAnimation 或创建自定义小部件的问题。

4

1 回答 1

4

样式动画是从私有QStyleAnimation( ) 派生的,因此#include "qstyleanimation_p.h"它们是。例如,滚动条样式动画是.QAbstractAnimationQObjectQScrollbarStyleAnimation

以下是 Windows 样式drawControl获取动画指针的方式:

if (QProgressStyleAnimation *animation = 
  qobject_cast<QProgressStyleAnimation*>(d->animation(opt->styleObject)))

各种样式对象的动画由样式PIMPL 的 animation,startAnimationstopAnimation方法管理。定义这些方法的基本 PIMPL 是QCommonStylePrivate( #include <private/qcommonstyle_p.h>)。

您以自己的风格使用它的方式是:

  1. 从 导出您的风格QCommonStyle,使用 PIMPL 习语,并从 导出您的 pimpl QCommonStylePrivate。我已经记录了 Qt 的 PIMPL 习惯用法,以使其更容易。

  2. 重用现有样式动画类之一,或使用派生自QStyleAnimation.

  3. 利用QCommonStylePIMPL 的方法来管理动画。不过,首先由您来创建动画实例。

于 2015-06-22T14:26:21.970 回答