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