• 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

  • 相关阅读:
    使用PowerDesigner创建表并导入到数据库
    第二次作业——结对项目之需求分析与原型模型设计
    使用Git进行代码管理
    常用
    头文件
    只出现一次的数
    链表实现基础排序算法
    判断链表有公共点
    单链表判环
    二叉树非递归遍历
  • 原文地址:https://www.cnblogs.com/raichen/p/5072015.html
Copyright © 2020-2023  润新知