[Qt][绘图][下]详细讲解


1.绘制形状

1.线段

  • 函数原型void drawLine(const QPoint &p1, const QPoint &p2);
  • 参数
    • p1:绘制起点坐标
    • p2:绘制终点坐标
  • 示例
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        painter.drawLine(20, 20, 200, 20);
    	painter.drawLine(QPoint(20, 100), QPoint(200, 100));
    }
    

2.矩形

  • 函数原型void QPainter::drawRect(int x, int y, int width, int height)
  • 参数
    • x:窗口横坐标
    • y:窗口纵坐标
    • width:矩形宽度
    • height:矩形高度
  • 示例
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
    	painter.drawRect(100, 100, 300, 200);
    }
    

3.圆形

  • 函数原型void QPainter::drawEllipse(const QPoint& center, int rx, int ry)
  • 参数
    • center:中心点坐标
    • rx:横坐标
    • ry:纵坐标
  • 示例
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
    	painter.drawEllipse(200, 200, 100, 100);
    }
    

4.文本

  • QPainter类中不仅提供了绘制图形的功能,还可以使⽤QPainter::drawText()来绘制⽂字,也可以使⽤QPainter::setFont()设置字体等信息
  • 注意QPainter::drawText()参数的含义
    • 第一个参数:文字最左侧的位置
    • 第二个参数:文字的基线位置(写字母四线格,第三根线的位置)
  • 示例
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        painter.drawText(0, 100, "SnowK");
    }
    

2.绘制图片

1.处理图像类

  • Qt提供了四个类来处理图像数据QImageQPixmapQBitmapQPicture,它们都是常⽤的绘图设备
  • QImage主要⽤来进⾏I/O处理,它对I/O处理操作进⾏了优化,⽽且可以⽤来直接访问和操作像素
  • QPixmap主要⽤来在屏幕上显⽰图像,它对在屏幕上显⽰图像进⾏了优化
  • QBitmapQPixmap的⼦类,⽤来处理颜⾊深度为1的图像,即只能显⽰⿊⽩两种颜⾊
  • QPicture:⽤来记录并重演QPainter命令
  • 本篇主要讲解QPixmap

1.绘制简单图片

  • 图⽚绘制可以使⽤QPainter类中的drawPixmap()来实现
  • 示例
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
    	painter.drawPixmap(0, 0, QPixmap(":/SnowK.jpg"));
    }
    

2.平移图片

  • 平移图⽚实际是通过改变坐标来实现
  • QPainter类中提供了translate()来实现坐标原点的改变
  • 示例
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
        painter.translate(100, 100);
    	painter.drawPixmap(0, 0, QPixmap(":/SnowK.jpg"));
    }
    

3.缩放图片

  • 图⽚的放⼤和缩⼩可以使⽤QPainter类中的drawPixmap()来实现
  • 示例
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
    	
        // 以(0, 0)开始画图,尺寸于原图一致
    	painter.drawPixmap(0, 0, QPixmap(":/SnowK.jpg"));
        
        // 以(300, 400)开始画图,尺寸变为 50*60
        painter.drawPixmap(300, 400, 50, 60, QPixmap(":/SnowK.jpg"));
    }
    

4.旋转图片

  • 图⽚的旋转使⽤的是QPainter类中的rotate(),本质是把QPainter对象进行了旋转
    • 它默认是以原点为中⼼进⾏旋转的
    • 如果要改变旋转的中⼼,可以使⽤translate()完成
  • 示例
    void Widget::paintEvent(QPaintEvent *event)
    {
        QPainter painter(this);
    	
        // 让图片的中心作为旋转的中心
        painter.translate(200, 300);
        
        // 顺时针旋转90度
        painter.rotate(90);
        
        // 复原原点位置
        painter.translate(-200, -300);
        
    	painter.drawPixmap(0, 0, QPixmap(":/SnowK.jpg"));
    }
    

3.特殊的绘图设备

0.前言

  • 之前是使⽤QWidget作为绘图设备,Qt中还存在下列三个⽐较特殊的绘图设备
    • QPixmap:⽤于在显⽰器上显⽰图⽚
    • QImage:⽤于对图⽚进⾏像素级修改
    • QPicture:⽤于对QPainter的⼀系列操作进⾏存档

1.QPixmap

  • 核心特性
    • 使⽤QPainter直接在上⾯进⾏绘制图形
    • 通过⽂件路径加载并显⽰图⽚
    • 搭配QPainterdrawPixmap()函数,可以把这个图⽚绘制到⼀个QLabelQPushButton等控件上
    • 和系统/显⽰设备强相关,不同系统/显⽰设备下,QPixmap的显⽰可能会有所差别

2.QImage

  • 核心特性
    • 使⽤QPainter直接在上⾯进⾏绘制图形
    • 通过⽂件路径加载并显⽰图⽚
    • 能够针对图⽚进⾏像素级别的操作(操作某个指定的像素)
    • 独⽴于硬件的绘制系统,能够在不同系统之上提供⼀致的显⽰

3.QPicture

  • QPicture类似于很多游戏的Replay功能
  • 核心特性
    • 使⽤QPainter直接在上⾯进⾏绘制图形
    • 通过⽂件路径加载并显⽰图⽚
    • 能够记录QPainter的操作步骤
    • 独⽴于硬件的绘制系统,能够在不同系统之上提供⼀致的显⽰
  • 注意QPicture加载的必须是⾃⾝的存档⽂件,⽽不能是任意的png、jpg等图⽚⽂件
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DieSnowK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值