第十章 2D绘图

2019-9-16

  1. 基本绘制和填充

1)基本绘制和填充

QPainter:画家
QPainter painter(this):指定绘图设备为this;
或者 OPainter painter; painter.begin(this);

画笔:QPen
//创建画笔
QPen pen(Qt::green, 5, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin);
//画家使用画笔
painter.setPen(pen);
painter.drawArc(rectangle, startAngle, spanAngle);
//startAngle为起始角度,正时顺时针,负时逆时针,spanAngle为跨越的角度,为正

画刷:QBrush
// 创建画刷
QBrush brush(QColor(0, 0, 255), Qt::Dense4Pattern);
// 使用画刷
painter.setBrush(brush);

2)渐变填充

线性渐变:QLinearGradient
辐射渐变:QRadialGradient,其中焦点就是辐射的中心,圆心是圆所在的位置;
锥形渐变:QConicalGradient
  1. 坐标系统

1)抗锯齿渲染

就是对图像的边缘进行平滑处理,使其看起来更加柔和流畅。
偶数像素:像素会在数学定义的点的周围对称渲染;
奇数像素:像素会在数学定义的点的右边和下边进行渲染;
假如说我画了一个矩形:(2,2,3,4)即左上角点为(2.2),长为3,宽为4,并且像素为1,
那么就是说(2,2)点的右边和下边是矩形的边框。

2)坐标变换

  1. 其它绘制
这里需要注意的是:
qt要在当前类对应的窗口上绘图一般需要重写paintEvent函数,但是Qt的事件过滤器默认是把父窗口下子控
件的绘图事件给过滤了的,因此重写父窗口的paintEvent函数是无法在子控件上进行绘图的。
(1)定义一个MyLabel类继承自QLabel,在该类中重写paintevent函数,然后在用MyLabel类的对象即
可;
(2)使用事件过滤器,在子控件的绘图事件被过滤前对子控件的绘图事件进行处理;
可以给某个控件安装事件过滤器,也可以给整个应用程序安装事件过滤器。
发布了179 篇原创文章 · 获赞 79 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_34600424/article/details/100901824
今日推荐