Всем привет. Пытаюсь сделать анимацию изменения цвета заливки у своего класса наследованного от QGraphicsPathItem. Вот значится код:
class Pointer : public QObject, public QGraphicsPathItem
{
Q_OBJECT
Q_PROPERTY(QBrush brush READ brush WRITE setBrush)
public:
QStateMachine *state;
QState *stateTrue, *stateFalse;
Brush *col;
Pointer(const QPainterPath &border, QGraphicsItem *parent);
signals:
void enableTrue();
void enableFalse();
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *)
{
emit enableFalse();
}
};
Код конструктора:
Pointer::Pointer(const QPainterPath &border, QGraphicsItem *parent)
: QGraphicsPathItem(border, parent)
{
this->setPen(QPen(Qt::NoPen));
this->setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
col = new Brush(Qt::red);
state = new QStateMachine;
stateTrue = new QState(state);
stateFalse = new QState(state);
QState *stateNone = new QState(state);
stateNone->assignProperty(col, "color", QColor(100,100,100));
stateTrue->assignProperty(col, "color", QColor(150,150,150));
stateFalse->assignProperty(col, "color", QColor(200,200,200));
stateNone->assignProperty(this, "brush", *col);
stateTrue->assignProperty(this, "brush", *col);
stateFalse->assignProperty(this, "brush", *col);
state->setInitialState(stateNone);
QParallelAnimationGroup *group = new QParallelAnimationGroup;
QPropertyAnimation *anim = new QPropertyAnimation(col, "color");
anim->setDuration(2000);
QPropertyAnimation *anim1 = new QPropertyAnimation(this, "brush");
anim1->setDuration(2000);
group->addAnimation(anim);
group->addAnimation(anim1);
QSignalTransition *trans = stateNone->addTransition(this, SIGNAL(enableTrue()), stateTrue);
trans->addAnimation(group);
trans = stateNone->addTransition(this, SIGNAL(enableFalse()), stateFalse);
trans->addAnimation(group);
state->start();
this->setBrush(*col);
}
Ну это уже совсем такой вариант... но суть думаю ясна. Вот кстати Brush:
class Brush : public QObject, public QBrush
{
Q_OBJECT
Q_PROPERTY(QColor color READ color WRITE setColor)
public:
Brush() : QBrush()
{}
Brush(Qt::GlobalColor color, Qt::BrushStyle style = Qt::SolidPattern) : QBrush(color, style)
{}
};
Пробовал разные варианты.
Использую обычную QBrush, если делать анимацией напрямую изменение brush в this, то она цвет меняет по истечению времени, но не плавно, оно и понятно, ведь не получится "анимационно" переходить из, условно, кисть1 в кисть2, это ведь не числовое значение. Добавить свойство цвета к this и его менять у меня не вышло. Там есть только такое this->brush().color() ну и setSolor().
Создал свою Brush, пробовал анимацией менять только цвет в своей Brush, числовые значения цвета "анимационно" менялись, проверял. Возможно я что-то не так делал, но однако же не вышло назначить свою Brush в this->brush так, чтобы при изменении Brush менялся и this->brush. То есть цвет в Brush менялся, но в this->brush он оставался на своём начальном значении. Была идея объявить свою Brush так: Brush *col= this->brush(); Но не работает, ведь там QBrush, а col это Brush от QBrush и Object. А если объявлять col как QBrush, тогда ж цвет анимацией не сменишь...
И вот последний вариант, что я скинул, попытка соединить предыдущие варианты. Что-то не работает тоже.
Прошу помощи...