【Qt】QPainter(基础)

1、QPainter简介

QPainter类在小部件和其他绘制设备上执行低级绘制。

QPainter提供了高度优化的功能来完成大多数绘图GUI程序所需的功能。它可以画任何东西,从简单的线条到复杂的形状,如馅饼和和弦。它还可以绘制对齐的文本和像素图。通常,它在“自然”坐标系中绘制,但也可以进行视图和世界变换。QPainter可以对继承QPaintDevice类的任何对象进行操作。
QPainter的常见用途是在小部件的绘画事件中:构造和自定义(例如设置笔或画笔)画家。然后画画。请记住在绘制后销毁QPainter对象。
QPainter的核心功能是绘图,但该类还提供了几个功能,允许您自定义QPainter设置及其渲染质量,以及其他启用剪裁的功能。此外,您可以通过指定画家的构图模式来控制不同形状如何合并在一起。
isActive()函数指示画家是否处于活动状态。painter由begin()函数和接受QPaintDevice参数的构造函数激活。end()函数和析构函数会将其停用。

QPainter与QPaintDevice和QPaintEngine类一起构成了Qt油漆系统的基础。QPainter是用于执行绘图操作的类。QPaintDevice表示可以使用QPainter在其上绘制的设备。QPaintEngine提供了画家用来绘制不同类型设备的界面。如果绘制器处于活动状态,device()将返回绘制器绘制的绘制设备,paintEngine()则返回绘制器当前正在运行的绘制引擎。有关详细信息,请参阅绘制系统。

QPainter ->QPaintEngine->QPaintDevice

有时,让别人在不寻常的QPaintDevice上作画是可取的。QPainter支持一个静态函数setRedirected()。

警告:当paintdevice是一个小部件时,QPainter只能在paintEvent()函数内部或在paintEvent()调用的函数中使用。

绘图事件
QPainter只能使用paintEvent(QPaintEvent *ev)这个绘图事件在Qt窗口上绘图,绘图事件会在窗口刷新时触发,如窗口最大化、窗口最小化、拖动窗口边缘等,如下是重写父类的绘图事件,实现在窗口上绘制:

QPainter只能使用paintEvent(QPaintEvent *ev)这个绘图事件在Qt窗口上绘图,绘图事件会在窗口刷新时触发

void Widget::paintEvent(QPaintEvent *ev)
{
    //构造画家对象
    QPainter painter(this);
    //保存当前画家状态
    painter.save();
    //设置画笔颜色
    painter.setPen(QPen(QColor(Qt::blue)));
    //设置字体
    QFont font;
    font.setFamily("Microsoft Yahei");
    font.setPixelSize(50);
    painter.setFont(font);
    //绘制文本
    painter.drawText(this->rect(),Qt::AlignCenter,"QT");

    //设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing,true);
    //起始角度
    int startAngle=1*16;   //这个16是 1/16,画个圆是5760 (16 * 360)
    //跨越角度
    int spanAngle=-180*16;  //正数逆时针,负数顺时针
    //绘制弧线
    painter.drawArc(QRectF(30.0,230.0,180.0,180.0), startAngle, spanAngle);
    //绘制弦
    painter.drawChord(QRectF(250.0,20.0,180.0,180.0), startAngle, spanAngle);
    //恢复上面保存的状态
    painter.restore();

    auto rectF = QRectF(30.0,230.0,180.0,180.0);
    painter.drawRect(rectF);

    //保存当前画家状态
    painter.save();
    //设置画笔颜色
    painter.setPen(QPen(QColor(Qt::blue)));
    //设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing,true);
    //绘制椭圆
    painter.drawEllipse(QPoint(500,120),60,80);
    //恢复上面保存的状态
    painter.restore();


    //保存当前画家状态
    painter.save();
    //设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing,true);
    //多边形的顶点坐标
    static const QPoint pts[4]={
        QPoint(50,50),QPoint(120,50),QPoint(180,200),
        QPoint(50,200)
    };
    //绘制多边形
    painter.drawPolygon(pts,4);
    //恢复上面保存的状态
    painter.restore();

    //保存当前画家状态
    painter.save();
    //设置画笔颜色
    painter.setPen(QPen(QColor(Qt::darkBlue)));
    //设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing,true);
    //设置画刷
    painter.setBrush(QBrush(QColor(Qt::red)));
    //绘制矩形
    painter.drawRect(QRect(300,300,20,20));
    //恢复上面保存的状态
    painter.restore();
}

在这里插入图片描述

QPainter的一些绘制图形的函数

drawPoint(绘制点)
drawPoints(绘制多个点)
drawLine(绘制线)
drawLines(绘制多条线)
drawText(绘制文本)
drawConvexPloygon(绘制凸多边形)
drawRoundedRect(绘制带倒角矩形)
drawPolyline(绘制多段线)
drawPolygon(绘制多边形)
drawRect(绘制矩形)
drawRects(绘制多矩形)
drawEllipse(绘制椭圆)
drawArc(绘制弧)
drawChord(绘制弦)
drawPie(绘制扇形)

https://blog.csdn.net/zwcslj/article/details/140306498

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值