Qt的绘图系统(画家,绘图工具,绘图设备)


在这里插入图片描述

绘图概念

图系统基于QPainter,QPainterDevice和QPaintEngine三个类
QPainter(画家) 使用QPaintEngine(绘图工具)在QPainterDevice(绘图设备)上画画。
在这里插入图片描述
注意:
1、如果在主窗口上绘画 必须在绘图事件(paintEvent)中完成画画.
2、绘图事件 调用的时机(1、窗口加载 2、update())
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
widget.h的类中:
在这里插入图片描述
widget.cpp
在这里插入图片描述

案例:画一个背景图(画家的方法)

QPainter画家的方法:
在这里插入图片描述
在这里插入图片描述
在widget.cpp的绘图事件中:

//重写绘图事件  主窗口加载的时候 调用
void Widget::paintEvent(QPaintEvent *event)
{
    //定义一个画家 画图片
    QPainter *painter = new QPainter(this);

    //定义一个图片控件
    QPixmap pix;
    pix.load(":/image/Sunny.jpg");
    //修改图片大小(和窗口一样大)
    pix.scaled(this->width(),this->height());

    //画家在主窗口绘画
    painter->drawPixmap(0,0,this->width(),this->height(), pix);
}

运行结果:
在这里插入图片描述

案例:通过update()重新加载绘图事件

ui文件:
在这里插入图片描述
widget.h文件声明 画图时间函数
在这里插入图片描述
widget.cpp的构造函数中 让按钮动起来
在这里插入图片描述
widget.cpp的paintEvent绘图事件:

//重写绘图事件
void Widget::paintEvent(QPaintEvent *event)
{
    static int x = 0;
    //定义一个画家
    QPainter *painter = new QPainter(this);
    //定义一个图片控件
    QPixmap pix;
    pix.load(":/image/sunny.png");
    pix.scaled( pix.width()*0.5, pix.height()*0.5);

    //画家绘图
    //drawPixmap前两个参数是起点坐标

    painter->drawPixmap(x,0, pix.width(), pix.height(),pix);
    x+=2;
    if(x >= this->width())
    {
        x = 0;
    }
}

2、画家的其他绘制函数

1、划线drawLine

在这里插入图片描述

//划线
    painter->drawLine(0,0,200,200);

2、画矩形

在这里插入图片描述
//画家对 画笔进行设置
在这里插入图片描述
//设置画笔颜色
在这里插入图片描述
在这里插入图片描述
设置样式:
在这里插入图片描述
在这里插入图片描述

//画矩形
    //画家对 画笔进行设置
    //painter->setPen(Qt::DotLine);//样式
    painter->setPen(Qt::red);//颜色 红色
    painter->drawRect(50,50,100,100);

运行结果:
在这里插入图片描述

3、画圆

在这里插入图片描述

//画圆
    painter->drawEllipse(150,150,200,200);
    //画椭圆
    painter->drawEllipse(200,400,200,100);

运行结果:
在这里插入图片描述

3、绘图设备

在这里插入图片描述

案例1:QBitmap

在widget.cpp的构造函数中:
在这里插入图片描述
运行结果:
在这里插入图片描述

案例2:image的像素操作

在QImage类中:
在这里插入图片描述
在widget.cpp的构造函数中:

#if 1
    //定义QIamge一个绘图设备
    QImage img;
    img.load(":/image/up.png");//事先添加资源

    for(int i=50;i<100;i++)
    {
        for(int j=50;j<100;j++)
        {
            int value= qRgb(255,0,0);
            img.setPixel(i,j,  value);
        }
    }

    //定义一个画家
    QPainter painter(&img);
    painter.drawEllipse(QPoint(30,30),30,30);
    //保存图片
    img.save("C:\\work\\qt\\day21\\02_test\\imge02.jpg");
#endif

运行结果:
在这里插入图片描述
在这里插入图片描述

案例:重现绘图指令QPicture

在widget.cpp的构造函数中(保存绘图指令)

#if 1
    //绘图设备
    QPicture picture;
    //画家
    QPainter painter;
    
    //记录绘图指令
    painter.begin(&picture);
    painter.drawEllipse(100,100,100,100);
    //结束记录绘图指令
    painter.end();
    
    //保存绘图指令
    picture.save("C:\\work\\qt\\day21\\02_test\\pic.zl");
    
#endif

运行结果:
在这里插入图片描述
重现pic.zl 到主窗口中(绘图事件中完成)
在widget.cpp的绘图事件中写

#if 1
    QPicture picture;
    QPainter painter(this);
    //绘图设备picture 加载绘图指令
    picture.load("C:\\work\\qt\\day21\\02_test\\pic.zl");

    //画家根据 绘图指令绘图
    painter.drawPicture(100,100, picture);
#endif

运行结果:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值