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  

painter.fillRect(r,bs);  //填充矩形--画实心矩形
//参数1:QRect矩形
//参数2:QBrush画刷

 

pr.drawText(r,Qt::AlignCenter,"AAA");  //绘制文本
//参数1:QRect矩形
//参数2:对齐方式
//参数3:文本

 

 

 

绘图设备: 

#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    

 

 

 

posted @ 2019-09-27 08:56  天子骄龙  阅读(1930)  评论(0编辑  收藏  举报