• QPainter、QPen 、QBrush(概念)


    Qt中的三大绘画类:

    • QPainter :进行绘画
    • QPaintDevice :提供画图设备,是一个二维的抽象(是所有可绘制对象的基类)
    • QPaintEngine :提供了画家用于绘制到不同类型的设备上的界面

     QPainter(画家)

    QPainter 提供高度优化的功能来完成 GUI 程序所需的大部分绘图。它可以绘制从简单线条到复杂形状(如馅饼和和弦)的所有内容。它还可以绘制对齐的文本和像素图。通常,它绘制“自然”坐标系,但它也可以进行视图和世界转换。QPainter 可以对继承QPaintDevice类的任何对象进行操作。

    QPainter 一般再一个部件重绘事件的处理函数paintEvent()中进行绘制,使用时先创建QPainter对象。 

    void paintEvent(QPaintEvent *event)绘画事件

    在QPainter中可以有很多功能

    构造函数为:

    注意创建对象时,一定要指定绘制对象,这样才能绘制。 

    1. void Widget::paintEvent(QPaintEvent *event)//绘画事件
    2. {
    3. QPainter painter(this);//创建一个画家
    4. }
    begin(QPaintEvent *event)开始绘制
    end()结束绘制
    1. void Widget::paintEvent(QPaintEvent *event)//绘画事件
    2. {
    3. QPainter painter;
    4. painter.begin(this);//指定设备
    5. painter.end();//结束绘制
    6. }


    绘制图形

    常用的一些图形:

    绘制线条:

    1. void Widget::paintEvent(QPaintEvent *event)//绘画事件
    2. {
    3. QPainter painter(this);
    4. painter.drawLine(0,0,100,100);//绘制线条
    5. }

    绘制圆形:

    1. void Widget::paintEvent(QPaintEvent *event)//绘画事件
    2. {
    3. QPainter painter(this);
    4. painter.drawEllipse(100,100,100,100);//绘制圆
    5. }

    绘制矩形:

    1. void Widget::paintEvent(QPaintEvent *event)//绘画事件
    2. {
    3. QPainter painter(this);
    4. // 起始点,宽 高
    5. painter.drawRect(200,200,100,100);//绘制矩形
    6. }

    绘制圆弧:

    QPainter::drawArc(int x,int y,int width,int height,intstartAngle,intspanAngle)

    • x  y  代表起始点
    • width  height  代表宽度和高度
    • startAngle  spanAngle  代表起始角度和跨越角度

     startAngle  spanAngle  代表起始角度和跨越角度

    • 这里的角度需要*16即一个完整的圆等于 5760 (16 * 360)
    • 正值为逆时针,负值为顺时针

    正值为逆时针:

    1. void Widget::paintEvent(QPaintEvent *event)//绘画事件
    2. {
    3. painter.drawArc(100,100,100,100,90*16,180*16);//绘制弧线,起始点为90,跨度为180
    4. }

    负值为顺时针:

    1. void Widget::paintEvent(QPaintEvent *event)//绘画事件
    2. {
    3. painter.drawArc(100,100,100,100,90*16,-180*16);//绘制弧线,起始点为90,跨度为-180
    4. }

     其他的可以根据帮助文档,查看使用方法。

     

    QPen(画笔)

     QPen(画笔)

    QPen可以为QPainter提供了画笔来绘制线条和形状的轮廓。

    构造函数:

     最常用的构造函数为:

    QPen(const QBrush &brush, qrealwidth, Qt::PenStylestyle= Qt::SolidLine, Qt::P enCapStylecap= Qt::SquareCap, Qt::PenJoinStylejoin= Qt::BevelJoin)

    • brush 画刷
    • Qt::PenStylestyle 笔的风格
    • Qt::PenCapStylecap 笔的帽子样式  
    • Qt::PenJoinStylejoin  笔的联接样式

    Qt::PenStylestyle笔的风格

    Qt::SolidLine实线
    Qt::DashLine虚线
    Qt::DotLine由几个像素分隔的点
    Qt::DashDotLine交替的点和破折号
    Qt::DashDotDotLine一个破折号,两个点,一个破折号,两个点
    Qt::CushomDashLine使用QPainterPathStroker::setDashPattern() 定义的自定义模式。

     Qt::PenCapStylecap 笔的帽子样式 

    Qt::SquareCap

    方帽
    Qt::FlatCap平帽
    Qt::RoundCap圆帽

     

     Qt::PenJoinStylejoin  笔的连接样式

    Qt::BevelJoin两条线之间的三角形凹口被填充
    Qt::MiterJoin

    线的外边缘延伸以成一定角度相交,并填充此区域

    Qt::RoundJoin填充两条线之间的圆弧

     常用的函数:

    setBrush()设置画刷
    setCapStyle设置笔帽风格
    setColor()设置颜色

    setDashPattern()

    将此笔的虚线模式设置为给定模式。这会将笔的样式隐式转换为Qt::CustomDashLine
    setJoinStyle()设置笔的连接样式
    setStyle()设置笔的样式
    setWidth()设置笔的宽度
    setWidthF()设置笔的宽度浮点数

    设置自定义的笔的样式:

    1. void Widget::paintEvent(QPaintEvent *event)//绘画事件
    2. {
    3. QPainter painter(this);
    4. QPen pen;
    5. QVector<qreal> sing;
    6. qreal space=4;//空格数
    7. sing<<1<<space<<3<<space<<9<<space<<27<<space<<9<<space;//数量必须为双数
    8. pen.setDashPattern(sing);//设置笔的样式
    9. pen.setWidth(2);//设置笔的宽度
    10. painter.setPen(pen);//修改画家的笔
    11. painter.drawLine(100,100,100,0);//绘制线条
    12. painter.drawLine(0,0,100,100);//绘制圆
    13. painter.drawRect(200,200,100,100);//绘制矩形
    14. }

     

    QBrush(画刷)

    QBrush 类定义了QPainter 绘制的形状的填充图案。

    构造函数:

     常用的函数:

    setColor()设置颜色
    setStyle()设置画刷风格
    setTexture()将画笔像素图设置为像素图
    setTextureImage()将画笔图像设置为图像
    setTransfrom()将矩阵设置为当前画笔上的显式转换矩阵

    Qt::GlobalColor(颜色)

    Qt::BrushStyle(画刷风格)

     画刷的使用:

    1. void Widget::paintEvent(QPaintEvent *event)//绘画事件
    2. {
    3. QPainter painter(this);
    4. QPen pen;
    5. QVector<qreal> sing;
    6. qreal space=4;//空格数
    7. sing<<1<<space<<3<<space<<9<<space<<27<<space<<9<<space;//数量必须为双数
    8. pen.setDashPattern(sing);//设置笔的样式
    9. pen.setWidth(2);//设置笔的宽度
    10. painter.setPen(pen);//修改画家的笔
    11. QBrush brush(Qt::red,Qt::Dense1Pattern);//设置画刷颜色和风格
    12. painter.setBrush(brush);//设置画刷
    13. painter.drawRect(200,200,100,100);//绘制矩形
    14. }

     

  • 相关阅读:
    ros2与windows入门教程-修改域Domain_ID
    Java IO包之序列化与ObjectInputStream、ObjectOutputStream的简介说明
    运动健身买什么耳机好用、最优秀的健身耳机推荐分享
    技术对接40
    STM32的GPIO端口的八种模式解析
    Linux—软件管理
    JS中常见的遍历方法
    Chisel 入门(2)运算符
    appium+jenkins实例构建
    极盾故事|某头部私募基金“扩展检测响应XDR平台”建设
  • 原文地址:https://blog.csdn.net/qq_45303986/article/details/127926121