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++服务器