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    

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM