Qt中QPainter的使用

时间:2023-02-13 01:09:48

Qt中QPainter的使用

GUI用户界面的优点是通过提供可视化的工具为客户提供便利的操作,界面上的按钮、编辑框等都是通过绘图得到的。Qt的二维绘图基本功能是使用QPainter在绘图设备上绘图,通过绘制基本的点、线、圆等基本图形来组成自己需要的图形,得到的图形是不可以交互操作的。整个绘图系统基于QPainter、QPaintDevice和QPaintEngine三个类。QPainter用来执行绘制操作,QPaintDevice是一个抽象的二维空间,这个抽象的二维空间允许QPainter在上面进行绘制,也就是QPainter的工作空间。QPaintEngine为QPainter提供了在不同设备上进行绘制的接口。绘图设备包括QWidget、QPixmap、QImage等,这些设备的作用为QPainter提供一个“画布”。

QWidget类及其子类是最常用的绘图设备,从QWidget类继承的类都有paintEvent()事件,要在设备上绘图,只需要重写此方法就可以了,

在paintEvent() 事件里的基本代码结构为:

void Widget::paintEvent(QPaintEvent *ev)
{
    //构造画家对象
    QPainter painter(this);
    //保存当前画家状态
    painter.save();
    ....
    //恢复上面保存的状态
    painter.restore();
}

常用方法有:

drawLine(绘制线段)

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

代码示例:

画弧线

void Widget::paintEvent(QPaintEvent *ev)
{
    //构造画家对象
    QPainter painter(this);
    //保存当前画家状态
    painter.save();
    //设置画笔颜色
    painter.setPen(QPen(QColor(Qt::green)));
    //设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing,true);
    //起始角度
    int startAngle=30*16;
    //跨越角度
    int spanAngle=120*16;
    //绘制弧线
    painter.drawArc(QRectF(30.0,50.0,80.0,70.0),startAngle,spanAngle);
    //恢复上面保存的状态
    painter.restore();
}

画多边形

void Widget::paintEvent(QPaintEvent *ev)
{
    //构造画家对象
    QPainter painter(this);
    //保存当前画家状态
    painter.save();
    //设置画笔颜色
    painter.setPen(QPen(QColor(Qt::green)));
    //设置抗锯齿
    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();
}

该文章会更新,欢迎大家批评指正。

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:[Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器

相关文章