Qcanvse画图,画图并且到使其随机移动效果如下

 

 

下面是实现的代码:

工程文件MouseMove.pro

#####################################################################

# Automatically generated by qmake (1.07a) Thu Dec 15 11:19:45 2011

#####################################################################

TEMPLATE = app

INCLUDEPATH += .

MOC_DIR += .moc

OBJECTS_DIR += .tmp

# Input

HEADERS += main.h

SOURCES += main.cpp

这里是main头文件

main.h

#include <qapplication.h>

#include <qcanvas.h>

#include <qfont.h>

#include <qimage.h>

#include <qtimer.h>

#include <math.h>

class View : public QCanvasView

{

Q_OBJECT

public:

    View(QCanvas& canvas);

protected:

    void contentsMousePressEvent(QMouseEvent *e);

    void Advance();

public slots:

    virtual void change();

private:

    QCanvasPolygon *p;

    QCanvasRectangle *r;

    QCanvasText *t;

    QTimer *tm;

    double m_x;

    double m_y;

};

程序源文件

mian.cpp

#include <qapplication.h>

#include <main.h>

 View::View(QCanvas& canvas) : QCanvasView(&canvas),m_x(0),m_y(0)

    {

        canvas.setBackgroundPixmap(QPixmap("logo.jpg"));

        canvas.resize(370, 300);

canvas.setAdvancePeriod(30);

        p = new QCanvasPolygon(&canvas);  // 多边行

        QPointArray a;

        a.setPoints(3, 50, 100, 200, 200, 50, 200);

        p->setVelocity(0.5,-0.5);

        p->setPoints(a);

        p->setBrush(Qt::blue);

        p->setZ(10); // 深度

        p->show();  // 显示绘图物件

        r = new QCanvasRectangle(100, 100, 50, 100, &canvas);// 四方形

        r->setBrush(Qt::red);

        r->setZ(10);

        r->show();

t = new QCanvasText("What will you study today? ^o^", &canvas); // 文字

        t->setFont(QFont("Helvetica", 12, QFont::Bold));

 t->setVelocity(0.5,0.5);

        t->setColor(Qt::blue);

        t->setZ(20);

        t->setTextFlags(AlignBottom);

        t->move(5, 20);

        t->show();

tm =  new QTimer(this);

connect(tm, SIGNAL(timeout()),this,SLOT(change()));

tm->start(1000);

    }

  void View::contentsMousePressEvent(QMouseEvent *e)

    {

      r->move(e->pos().x(), e->pos().y());

t->move(0,10);

    }

    void View::Advance()

    {

     qDebug("jj");

     if(t->x()>370)

t->move(0,0);

    }

  void View::change() //设置移动速度

    {

     r->move(rand()%10, rand()%10);

     t->move(rand()%10, rand()%10);

     p->move(rand()%10, rand()%10);

     m_x = rand()%10;

m_y = rand()%10;

r->setVelocity(m_x, m_y); // 移动速度

}

这是主函数

int main(int argc, char** argv)

{

    QApplication app(argc, argv);

    QCanvas canvas(0, 0);

    canvas.setAdvancePeriod(30);  // 移动更新时间间隔:

    canvas.setDoubleBuffering(true); // double buffer

    View c(canvas);

    app.setMainWidget(&c);

    c.show();

    return app.exec();

}

这里设置了移动的物体,速度,还设置了开始位置