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);
}
http://blog.csdn.net/yongan1006/article/details/7712821
總結
以上是生活随笔為你收集整理的QT 类及其实现效果(8)--橡皮筋线,Graphics view的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库选型之路YMatrix与Click
- 下一篇: 快一起来看看如何把音频转化为文字吧