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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)