一、选择图形的某个区域,绘制一个类似蚂蚁线的选区。使用类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);
}