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