需要 #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