Qt学习-10 <绘图设备 >

——  均为自学笔记,如有错误请指正


第一节  绘图系统

QPainter → QPaintEngine → QPaintDevice

  • QPainter :执行绘制操作 <画笔>
  • QPaintDevice:二维空间的抽象 <使用画笔的地方  "纸张、屏幕">
  • QPaintEngine:提供画笔在不同设备上进行绘制的统一接口<使"纸张、屏幕"使用同一种画笔>

使用QPainter在QPaintDevice上进行绘制,他们之间使用QPaintEngine进行通讯(即翻译QPainter的指令)

第二节  绘图设备

绘图设备是指继承QPainterDevice的子类,Qt一共提供了四个这样的类

  • QPixmap:专门为图像在屏幕上的显示做了优化。
  • QBitmap:是QPixmap的一个子类,它的色深限定为1,可以使用QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap。
  •  QImage:专门为图像的像素级访问做了优化 。        <对每一个像素点赋值>
  • QPicture则可以记录和重现QPainter的各条命令。

注:色深限定为1:只有白色和黑色

1. Pixmap    <画在磁盘上>
  • 代码
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //Pixmap绘图设备  <往磁盘去画>
    QPixmap pix(300,300);

    //填充颜色
    pix.fill(Qt::white);

    //声明画家
    QPainter painter(&pix);
    painter.setPen(QPen(Qt::green));
    painter.drawEllipse(QPoint(150,150),100,100);

    //保存
     pix.save("D:\\1_study\\qt_bilibili\\my\\day3\\04_QtPaintDevice\\pix.png");

}
  • 效果展示

2. QImage    <可以对像素点进行访> 
  • 代码  <基础操作 .cpp>
//QImage 绘图设备
    QImage img(300,300,QImage::Format_RGB32);

    //填充色
    img.fill(Qt::white);

    //声明画家
    QPainter painter(&img);
    painter.setPen(QPen(Qt::blue));
    painter.drawEllipse(QPoint(150,150),100,100);

    //保存
    img.save("D:\\1_study\\qt_bilibili\\my\\day3\\04_QtPaintDevice\\img.png");
  • 运行展示

  • 代码   <重写绘图事件,对像素点进行访问>
//.h下声明绘图事件函数

    //绘图事件
    void paintEvent(QPaintEvent *);





//.cpp下重写绘图事件  对像素点进行访问
//重写绘图事件
void Widget::paintEvent(QPaintEvent *)
{
    //创建画家
    QPainter painter(this);

    //利用QImage 对像素进行修改
    QImage img;
    img.load(":/Image/Luffy.png");

    //修改像素点
    for(int i = 50 ; i < 100 ; i ++)
    {
        for(int j = 50 ; j < 100 ; j++)
        {
            QRgb value = qRgb(255,0,0);
            img.setPixel(i,j,value);
        }
    }

    //画图位置
    painter.drawImage(0,0,img);


}
  • 运行展示

 3. QPicture    <可以记录和重现绘图指令> 
  • 代码 <第一步:画图并保存绘图指令.cpp构造函数中>
//QPicture绘图设备  可以记录和重现绘制指令
    QPicture pic;
    QPainter painter;  //先指定画家对象
    painter.begin(&pic);  //再指定绘图设备   开始画画

    painter.setPen(QPen(Qt::cyan));
    painter.drawEllipse(QPoint(150,150),100,100);


    painter.end();  //结束画画

    //保存到磁盘
    pic.save("D:\\1_study\\qt_bilibili\\my\\day3\\04_QtPaintDevice\\pic.zt");  //注意文件后缀名 为zt  这个文件中保存了绘图指令

注:此处保存文件名后缀.zt 可以自定义

  • 代码<第二步:重现绘图指令.cpp 重写绘图事件函数中>
// .h 头文件下 声明函数
void paintEvent(QPaintEvent *);



//.cpp下重写绘图事件

    //重写绘图事件
    void Widget::paintEvent(QPaintEvent *)
    {  
        //创建画家
        QPainter painter(this);
        QPicture pic;
        pic.load("D:\\1_study\\qt_bilibili\\my\\day3\\04_QtPaintDevice\\pic.zt");

        //画图位置
        painter.drawPicture(0,0,pic);
}
  • 运行展示

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值