一、选择图形的某个区域,绘制一个类似蚂蚁线的选区。使用类QRubberBand if (!rubberBand) rubberBand = new QRubberBand(QRubberBand::Rectangle, this); rubberBand->setGeometry(QRect(origin, QSize())); rubberBand->show();
二、Graphics view Graphics view框架结构主要包含了3个主要的类,分别是QGraphicsScene、QGraphicsView
、QGraphicsItem。QGraphicsScene场景类提供了一个用于管理位于其中的众多项目的
QGraphicsItem容器。QGraphicsView视口类用于显示场景中的项目。三者之间的关系
超时后可重新实现时间函数事件,完成相应相应超时处理。 void timerEvent(QTimerEvent *);
QGraphicsView和QGraphicsScene都有drawBackground()虚函数,它们做的工作都是 重画场景的背景。 MapWidget::drawBackground(QPainter *painter, const QRectF &rect) { painter->drawPixmap(int(sceneRect().left()),int(sceneRect().top()),map); }
使用QGraphicsItem必须重新实现两个函数
QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
使用
QGraphicsScene *scene = new QGraphicsScene(this);
scene->setSceneRect(-200,-200,400,400);
QGraphicsView *view = new QGraphicsView;
view->setScene(scene);
view->setMinimumSize(400,400);
view->show();
setCentralWidget(view);
动画效果 MainWindow::slotAddAnimationItem() { StarItem *item = new StarItem; QGraphicsItemAnimation *anim = new QGraphicsItemAnimation; //设置要加入的动画元素 anim->setItem(item); QTimeLine *timeLine = new QTimeLine(4000); timeLine->setCurveShape(QTimeLine::LinearCurve); //时间曲线永远循环 timeLine->setLoopCount(0); //设置时间轴 anim->setTimeLine(timeLine); int y = (qrand()@0) - 200; //设置过程点 for (int i=0; i<400; i++) { anim->setPosAt(i/400.0, QPointF(i-200,y)); } timeLine->start(); scene->addItem(item); }
http://blog.csdn.net/yongan1006/article/details/7712821