zoukankan      html  css  js  c++  java
  • qt5--QPainter绘图

     需要 #include <QPainter> 

    #include "win.h"
    #include "ui_win.h"
    #include <QDebug>
    #include <QPainter>
    
    Win::Win(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Win)
    {
        ui->setupUi(this);
        x=10;
        connect(ui->pushButton,&QPushButton::clicked,this,[=](){
            x++;
            //手动调用绘图事件
            update();//更新paintEvent事件【执行paintEvent事件】
    
        });
    
    }
    void Win::paintEvent(QPaintEvent *event){
        QPainter painter(this);  //创建一位画家
        //参数:绘图设备。this当前窗口
    
    
        QPen pen(QColor(255,0,0));  //创建画笔
        //参数:画笔颜色
    
        pen.setWidth(3);  //笔宽
        //【对drawText没有效果】
    
        //pen.setStyle(Qt::DotLine); //设置笔的风格
        //笔的各种风格:在Qt助手中搜索qt::penstyle
    
        painter.setPen(pen);  //给画家一根笔
    
        //QBrush brush(Qt::yellow);  //创建画刷--对封闭图形填充颜色
        //参数:颜色
        //参看系统定义颜色:搜索Qt::GlobalColor
    
        //brush.setStyle(Qt::Dense7Pattern);  //画刷风格
        //画刷的各种风格:在Qt助手中搜索Qt::BrushStyle
    
        //painter.setBrush(brush);  //给画家设置画刷
    
    
    
        //painter.drawLine(QPoint(10,10),QPoint(100,10));//直线
        //参数:两个点坐标
    
        //painter.drawEllipse(QRect(10,10,90,10));//椭圆
        //参数:前两个矩形左上角的点坐标,参数3和参数4:宽和高
    
        //painter.drawEllipse(QPoint(200,200),100,50);//椭圆
        //QPoint(200,200)  是圆心坐标
        //100是 横向半径;50是纵向半径
    
        //painter.drawRect(QRect(10,10,100,50));// 矩形
        //参数:矩形左上角坐标,宽,高
    
        //painter.drawRect(10,10,100,50);// 矩形
        //参数:矩形左上角坐标,宽,高
    
        //painter.drawText(QRect(10,10,100,40),"我是中国人");  //文字
        //参数1 区域
    
        //*********抗锯齿演示
        //painter.drawEllipse(QPoint(100,100),50,50);
        //painter.setRenderHint(QPainter::Antialiasing);//抗锯齿能力
        //QPainter::Antialiasing    在可能的情况下进行边的反锯齿绘制
        //QPainter::TextAntialiasing       尽可能的情况下文字的反锯齿绘制
        //QPainter::SmoothPixmapTransform  使用平滑的pixmap变换算法(双线性插值算法),而不是近邻插值算法
        //painter.drawEllipse(QPoint(250,100),50,50);
    
    
        //****平移坐标原点和状态的保存和状态的取出演示
        //painter.drawRect(20,20,50,50);
        //painter.translate(QPoint(100,0)); //平移坐标原点,横坐标移动100,纵坐标移动0
        //painter.drawRect(20,20,50,50);
        //painter.save(); //保存状态--保存坐标原点
        //painter.translate(QPoint(100,0));
        //painter.restore();  //取出状态--取出坐标原点
        //painter.drawRect(20,20,50,50);
    
        //画资源文件中的图片
        painter.drawPixmap(x,10,QPixmap(":/tupin/img/1.jpg"));//图片原始大小输出
    
    
    
    
    
    }
    
    Win::~Win()
    {
        delete ui;
    }

    以上实例下载地址:https://share.weiyun.com/5PjHG3u  

    绘图设备: 

    #include "win.h"
    #include "ui_win.h"
    #include <QDebug>
    #include <QPainter>
    #include <QPicture>
    
    Win::Win(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Win)
    {
        ui->setupUi(this);
    
    
    }
    void Win::paintEvent(QPaintEvent *event){
        //QPainter painter(this);  //创建一位画家
        //参数:绘图设备。this当前窗口
        //QPixmap QBitmap QImage QPicture 都是绘图设备
        //QPixmap专门为屏幕显示做了优化
        //QBitmap是QPixmap的一个子类,它的色深限定为1(只能黑和白),可以用QPixmap的isQBitmap()函数来判断QPixmap是不是QBitmap
        //QImage为图像的像素做了优化
        //QPicture可以记录和重现QPainter的各条命令
        //QPixmap主要是用于绘图,针对屏幕显示而最佳化设计,QImage主要是为图像I/O、图片访问和像素修改而设计的。当图片小的情况下,直接用QPixmap进行加载,画图时无所谓,当图片大的时候如果直接用QPixmap进行加载,会占很大的内存,一般一张几十K的图片,用QPixmap加载进来会放大很多倍,所以一般图片大的情况下,用QImage进行加载,然后转乘QPixmap用户绘制。QPixmap绘制效果是最好的
    
        //********QPixmap做绘图设备************************
    //    QPixmap pix(300,300); //创建一个QPixmap绘图设备
    //    //参数:宽和高
    //    QPainter painter(&pix); //绘图设备给画家
    //    QPen pen(Qt::red);
    //    painter.setPen(pen);
    //    pen.setWidth(3);
    //    pix.fill(Qt::white); //背景填充色
    //    painter.drawRect(QRect(10,10,100,50));
    //    pix.save("D:\sss\pix.png");  //保存图
    
    
        //********QImage做绘图设备************************
    //    QImage img(300,300,QImage::Format_RGB32);//创建一个QImage绘图设备
    //    //参数1  参数2 宽和高
    //    //参数3 调色板。在Qt助手搜索QImage::Format
    //    QPainter painter(&img); //绘图设备给画家
    //    QPen pen(Qt::red);
    //    painter.setPen(pen);
    //    pen.setWidth(3);
    //    img.fill(Qt::white); //背景填充色
    //    painter.drawRect(QRect(10,10,100,50));
    //    img.save("D:\sss\img.png");  //保存图
    
        //********QImage修改像素*********
    //    QImage img;  //创建绘图设备---理解成画纸
    //    img.load(":/tupin/img/1.jpg");  //加载图片
    //    QPainter painter(this);
    //    //painter.drawImage(QPoint(0,0),img); //把QImage绘图设备给画家
    //    for(int i=160;i<210;i++){
    //        for(int j=60;j<110;j++){
    //            QRgb rgb=qRgb(255,0,0);
    //            img.setPixel(i,j,rgb);  //设置像素
    //        }
    //    }
    //    painter.drawImage(QPoint(0,0),img);
    
    
        //*********QPicture做绘图设备*********
        QPicture pic;  //创建QPicture绘图设备
        //需要 #include <QPicture>
    //    QPainter painter;
    //    QPen pen(Qt::blue);
    //    painter.setPen(pen);
    //    painter.begin(&pic);  //给画家绘图设备
    //    painter.drawRect(QRect(10,10,100,50));
    //    painter.end();
    //    pic.save("D:\pic.lm");  //保存绘图指令
        pic.load("D:\pic.lm"); //重现绘图指令
        QPainter painter(this);
        painter.drawPicture(0,0,pic);//画pic图
        //参数1 参数2 坐标
    
    
    }
    
    Win::~Win()
    {
        delete ui;
    }

    上面实例下载地址:https://share.weiyun.com/5SHFONa    

  • 相关阅读:
    vue五十:Vue美团项目之商家详情-查看商品详情
    vue四十九:Vue美团项目之商家详情-tabbar状态切换和导航返回
    vue四十八:Vue美团项目之商家详情-左右联动之商品分类跟随商品列表滚动
    vue四十七:Vue美团项目之商家详情-左右联动之选中商品分类跳转到对应商品列表
    vue四十六:Vue美团项目之商家详情-商品滚动完成
    vue四十五:Vue美团项目之商家详情-商品分类滚动完成
    vue四十四:Vue美团项目之商家详情-导航栏和header布局
    vue四十三:Vue美团项目之首页-tabbar搭建
    vue四十二:Vue美团项目之首页-商家列表
    Ugly Number
  • 原文地址:https://www.cnblogs.com/liming19680104/p/11595635.html
Copyright © 2011-2022 走看看