QGraphics

QGraphicsView和QGraphicsScene

QGraphicsScene提供一个场景,可以添加各种item,QGraphicsView用于将元素显示,并支持旋转和缩放;可以将QGraphicsScene比作世界,QGraphicsView比作摄像机

基本用法:

将item加入scene后,通过setScene放入view查看

 1 #include <QApplication>
 2 #include <QtWidgets>
 3 #include <QGraphicsScene>
 4 #include <QGraphicsView>
 5 
 6 int main(int argc,char **argv)
 7 {
 8     QApplication app(argc,argv);
 9 
10     QGraphicsScene *scene = new QGraphicsScene;
11     QGraphicsView *view = new QGraphicsView;
12 
13     scene->addLine(0,0,150,150);
14     view->setScene(scene);
15     view->resize(500,500);
16     view->show();
17 
18     return app.exec();
19 }

 其他QGraphics封装的类

1 #include <QGraphicsLineItem>
2 #include <QGraphicsPixmapItem>
3 #include <QGraphicsTextItem>
4 #include <QGraphicsItemAnimation>   //动画
5 #include <QTimeLine>

 例子:

 1 MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
 2 {
 3     QGraphicsLineItem* lineItem;
 4     QGraphicsTextItem* textItem;
 5     QGraphicsPixmapItem* pixmapItem;
 6 
 7 
 8     _view = new QGraphicsView(this);
 9 
10     _view->setScene(_scene = new QGraphicsScene);
11 
12     _scene->addItem(lineItem = new QGraphicsLineItem(QLineF(QPointF(0, 0), QPointF(100, 100))));
13     _scene->addItem(textItem = new QGraphicsTextItem("hello world"));
14     _scene->addItem(pixmapItem = new QGraphicsPixmapItem(QPixmap("../1.jpg")));
15     textItem->setFont(QFont("aaa", 50, 700, true));
16     pixmapItem->setPos(200,200);
17     
18     //设置动画
19     QGraphicsItemAnimation* animation = new QGraphicsItemAnimation;
20     animation->setItem(pixmapItem);
21     QTimeLine* timeline = new QTimeLine(3000);
22     timeline->setLoopCount(2);  //次数
23 
24     animation->setTimeLine(timeline);
25     animation->setTranslationAt(1,200,200);
26     timeline->start();
27 }
 1 //实现截屏
 2 void MyWidget::mousePressEvent(QMouseEvent *ev)
 3 {
 4     if( ev->button() == Qt::RightButton)
 5     {
 6         QPixmap pixmap(size()); //初始化画布大小为窗口大小
 7         QPainter painter(&pixmap);
 8         painter.fillRect(QRect(0,0,size().width(),size().height()),Qt::white);  //将画布置为白色,默认Pixmap是黑色
 9         _view->render(&painter);
10         pixmap.save("../b.png");
11     }
12 }

注意render的用法,一般窗口类都有,相当于渲染,从一个对象拷贝到另一个对象

QPainter用来执行绘制的操作;QPaintDevice是一个二维空间的抽象,这个二维空间允许QPainter在其上面进行绘制,也就是QPainter工作的空间;QPaintEngine提供了画笔(QPainter)在不同的设备上进行绘制的统一的接口。

QPaintDevice可以理解成要在哪里去绘制,QPaintDevice有很多子类,比如QImage,以及QWidget,QPixmap,QBitmap

原文地址:https://www.cnblogs.com/raichen/p/5072015.html