Qt编程21:使用QPainter绘图一

QPainter类低水平的绘制,例如在窗口部件上。
绘制工具为做到绝大部分绘制图形用户界面程序的需要提供了高度优化的函数。 

绘图工具的典型用法是:


1、构造一个绘图工具。
2、设置画笔、画刷等等。
3、绘制。
4、销毁这个绘图工具。
绝大多数情况下,所有这些是在一个绘制事件中完成的。(99%的QPainter使用是在QWidget::paintEvent()的重新实现中。)

1、构造绘制工具:

  1>使用构造函数构造绘制工具(传入绘制设备指针)

   QPainter painter(this);                                                   //在构造函数中自动调用begin();在析构函数中自动调用end()

  2>结合使用(不传绘制设备指针)

   QPainter painter;

    painter.being(this);                                                      //调用begin传入绘制设备指针

    //开始绘制

    painter.end()                                                               //调用end()销毁绘制工具

 

实例:绘制点

    //绘制点---------------------
    //构建绘制工具
    QPainter painter(this);
    //设置画笔属性:红色\100\实线\圆
    painter.setPen(QPen(Qt::red, 100, Qt::SolidLine, Qt::RoundCap));
    //绘制点
    painter.drawPoint(100,100);
    painter.setPen(QPen(QBrush(Qt::blue), 100, Qt::SolidLine, Qt::SquareCap));
    painter.drawPoint(200,100);

 

效果:

 

实例:绘制线 

//绘制线-------------------
    //构建绘制工具
    QPainter painter;
    painter.begin(this);
    //Qt::DashDotDotLine::断线、点、点
    painter.setPen(QPen(Qt::red,5,Qt::DashDotDotLine,Qt::RoundCap));
    painter.drawLine(QPoint(50,50),QPoint(300,50));

    //Qt::DashDotDotLine::断线、点
    painter.setPen(QPen(Qt::blue,5,Qt::DashDotLine,Qt::SquareCap));
    painter.drawLine(QPoint(50,100),QPoint(300,100));


效果:

 

实例:绘制矩形

    //绘制矩形-----------------------
    QPainter painter(this);
    //设置边框属性
    painter.setPen(QPen(Qt::red,2,Qt::SolidLine,Qt::RoundCap));
    //设置填充属性
    painter.setBrush(QBrush(Qt::blue,Qt::FDiagPattern));
    //传入左上角坐标、以及宽度
    painter.drawRect(QRect(20,20,200,200));


效果:

 

实例:绘制椭圆


    //绘制椭圆
    QPainter painter(this);
    //设置边框圆滑
    painter.setRenderHint(QPainter::Antialiasing,true);
    //设置画笔(边框属性)
    painter.setPen(QPen(Qt::red,5,Qt::SolidLine,Qt::RoundCap));
    //设置刷子(填充)
    painter.setBrush(QBrush(Qt::blue));
    //跟画矩形类似
    painter.drawEllipse(20,20,200,100);
    //drawEllipse函数重载,传入中心点,设置从椭圆中心点往外的横向宽度、以及纵向宽度
    painter.drawEllipse(QPoint(200,200),100,10);


效果图:

 

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值