QT 类及其实现效果(8)--橡皮筋线,Graphics view

一、选择图形的某个区域,绘制一个类似蚂蚁线的选区。使用类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()%400) - 200;
  
    //设置过程点
    for (int i=0; i<400; i++)
    {
        anim->setPosAt(i/400.0, QPointF(i-200,y));
    }
    timeLine->start();
    scene->addItem(item);
}

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页