【Qt 基础】绘图

画笔

QPen pen;
pen.setWidth(3); // 线条宽度
pen.setColor(Qt::red);// 画笔颜色
pen.setStyle(Qt::DashLine);// 线条样式
pen.setCapStyle(Qt::RoundCap);// 线端样式
pen.setJoinStyle(Qt::BevelJoin);// 连接样式
painter.setPen(pen);

线条
在这里插入图片描述

线端

在这里插入图片描述

连接

在这里插入图片描述

画刷

    QBrush brush;
    brush.setColor(Qt::yellow);// 颜色
    brush.setStyle(Qt::SolidPattern);// 样式
  	brush.setTexture(QPixmap &pixmap);// 设置画刷图片

在这里插入图片描述

渐变

     QRadialGradient rg(W/2,H/2,qMax(W/8,H/8),W/2,H/2);
    rg.setColorAt(0,Qt::green);
    rg.setColorAt(1,Qt::blue);
    rg.setSpread(QGradient::ReflectSpread);
QLinearGradient
QRadialGradient
QConicalGradient

在这里插入图片描述

渐变模式

PadSpread
RepeatSpread
ReflectSpread

在这里插入图片描述

画家

可以画不同的基本图形元件

更复杂的图形用QPainterPath

对画家的操作

painter.rotate(15);//旋转
painter.translate(20,20);//平移
painter.scale(0.5,0.5);//坐标缩放
painter.shear(0.5,0.5);//扭转变换

painter.save();
painter.rotate(15);//旋转
painter.restore();
painter.drawRect(rect);

视口和窗口

物理设备提供最基本的坐标系,

通过各种变换得到逻辑坐标系,

为了更方便的操作,出现了视口坐标系和窗口坐标系,

视口表示绘图设备的任意一个矩形区域的物理坐标,默认情况下为整个绘图设备区域。

窗口与视口是同一个矩形,可以重新定义矩形区域的逻辑坐标。

视口设置为painter.setViewport(50,0,200,200),即物理设备的(50,0)为左上角,绘制一个200的正方形,改形状为视口。但坐标系与物理坐标系一致。

然后使用painter.setViewport(-50,-50,100,100)这里定义(50,0)(-50,-50)且对长宽做了缩放,这里是缩小了,缩小到(100,100),以后的操作都是在100$\times$100的空间进行。
在这里插入图片描述

    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setRenderHint(QPainter::TextAntialiasing);
    int W = this->width();
    int H  = this->height();
    qDebug()<<W<<" "<< H;
    int side = qMin(W,H);
    QRect rect((W-side)/2,(H-side)/2,side,side);

    painter.drawRect(rect);
    painter.setViewport(rect);
    painter.setWindow(-100,-100,200,200);

    QPen pen;
    pen.setWidth(2);
    pen.setColor(Qt::red);
    pen.setStyle(Qt::SolidLine);
    painter.setPen(pen);

    QLinearGradient linearGrad(0,0,100,0);
    linearGrad.setColorAt(0,Qt::yellow);
    linearGrad.setColorAt(1,Qt::green);
    linearGrad.setSpread(QGradient::PadSpread);
    painter.setBrush(linearGrad);
    //painter.setCompositionMode(QPainter::RasterOp_NotSourceXorDestination);
    painter.setCompositionMode(QPainter::CompositionMode_Difference);
    for(int i = 0; i < 36; i++){
        painter.drawEllipse(QPoint(50,0),50,50);
        painter.rotate(10);
    }

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

相关推荐

  1. QT基础教程(文本绘制)

    2024-07-14 21:04:01       55 阅读
  2. Qt+opencv】基础的图像绘制

    2024-07-14 21:04:01       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 21:04:01       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 21:04:01       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 21:04:01       58 阅读
  4. Python语言-面向对象

    2024-07-14 21:04:01       69 阅读

热门阅读

  1. python热门面试题三

    2024-07-14 21:04:01       23 阅读
  2. C++字符串String和字符串字面量String Literals

    2024-07-14 21:04:01       21 阅读
  3. .NET MAUI开源架构_3..NET MAUI 提供的内容

    2024-07-14 21:04:01       23 阅读
  4. .NET MAUI开源架构_4..NET MAUI 应用支持的平台

    2024-07-14 21:04:01       19 阅读
  5. Spring 事务管理配置方法

    2024-07-14 21:04:01       22 阅读
  6. ISA95-Part5-安全和权限管理的设计思路

    2024-07-14 21:04:01       23 阅读
  7. 前端请求整合

    2024-07-14 21:04:01       17 阅读
  8. 2024.7.13 刷题总结

    2024-07-14 21:04:01       22 阅读
  9. 安卓热门面试题二

    2024-07-14 21:04:01       19 阅读