• 5799阅读
  • 5回复

如何实现这样的动画效果 [复制链接]

上一主题 下一主题
离线tzqdo
 
只看楼主 倒序阅读 楼主  发表于: 2009-09-24
我应用graphics view 框架,在框架中添加一个自定义item,是一个点。然后有两个全局变量x,y,我想把x,y和item的坐标关联起来,然后在函数move()中修改x,y值以实现item的移动。

问题是,如果move()中的移动是分了两步或更多,则item只在move()执行完毕后位置突变,期间位置不变化。如果要实时更新item的位置,该如何做?

不知道我说清楚没,还望大侠指点
离线dbzhang800

只看该作者 1楼 发表于: 2009-09-24
捕捉移动的事件,然后刷新画布

具体参考manual

QVariant QGraphicsItem::itemChange ( GraphicsItemChange change, const QVariant & value )   [virtual protected]
离线tzqdo
只看该作者 2楼 发表于: 2009-09-24
引用第1楼dbzhang800于2009-09-24 18:37发表的  :
捕捉移动的事件,然后刷新画布
具体参考manual
QVariant QGraphicsItem::itemChange ( GraphicsItemChange change, const QVariant & value )   [virtual protected]



刷新画布?sence->update()?我在move()中的step1之后调用了这个方法,但是没有效果。
离线dbzhang800

只看该作者 3楼 发表于: 2009-09-24
不清楚你的 “move()中的移动是分了两步或更多” 是个什么概念,如果可能你可以贴出来部分代码
离线tzqdo
只看该作者 4楼 发表于: 2009-09-25
引用第3楼dbzhang800于2009-09-24 19:50发表的  :
不清楚你的 “move()中的移动是分了两步或更多” 是个什么概念,如果可能你可以贴出来部分代码


不还意思,没表达清楚。

point.h:

class Point:
    public QGraphicsItem,
    public QObject
{
//Q_OBJECT
public:
    Point(void);
    ~Point(void);
    QRectF boundingRect() const;
    QPainterPath shape() const;
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,        QWidget *widget);
    void timerEvent(QTimerEvent *event);
private:
    qreal angle;
    QColor color;
protected:
    void advance(int step);
};

double x,y;



Point.cpp:

#include "Point.h"

Point::Point(void): angle(0),color(qrand() % 256, qrand() % 256, qrand() % 256)

{
    startTimer(500);
}

Point::~Point(void)
{
}

void Point::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
{
    painter->setBrush(Qt::red);
    QPainterPath path(QPointF(0, 0));
...    painter->drawPath(path);
}

QRectF Point::boundingRect() const
{
...
}

QPainterPath Point::shape() const
{
...
}



void Point::timerEvent( QTimerEvent *event )
{
        setPos(x,y);
}



main.cpp:

void move(){

x=10,y=10;//step1
delay(10s);
x=20,y=20;//step2
delay(10s);
}


int main(){
x=0,y=0;
move();
return 0;
}

问题是我想让它在step1之后就刷新,该怎么改?
离线donixli1314

只看该作者 5楼 发表于: 2009-09-25
qt demo里面有你要的东西
自己好好看看demo里的代码
快速回复
限100 字节
 
上一个 下一个