上篇QT从入门到实战x篇_27_绘图事件QPainter(绘图事件void painterEvent();声明一个画家对象 QPainter painter(this);画笔QPen;画刷QBrush)介绍了在Qt如何利用绘图事件进行“画画”,并介绍了画笔画刷的设置方法。本篇将会介绍绘图事件QPainter的高级设置。
总结:
1. 抗锯齿
- 效率低
painter.setRenderHint(QPainter::Antialiasing);
2. 对画家进行移动
painter.translate(100,0);- 保持状态
save - 还原状态
restore
利用上节知识,在widget上绘制2个圆
void Widget::paintEvent(QPaintEvent *)
{
//高级设置
QPainter painter(this);
painter.drawEllipse(QPoint(100,50),50,50);
painter.drawEllipse(QPoint(200,50),50,50);
}
运行结果:

1. 抗锯齿
整体绘制的都是比较粗糙的,为了让
“画家”painter画的更认真一些, 设置抗锯齿提升绘制的质量,但是绘制效率会低一些
void Widget::paintEvent(QPaintEvent *)
{
//高级设置
QPainter painter(this);
painter.drawEllipse(QPoint(100,50),50,50);
//设置抗锯齿能力,绘制的更为仔细,没有毛边
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(200,50),50,50);
}
运行结果:右侧的圆看着更为清晰

2. 移动画家
改变
“画家”painter开始画画的起点
- 对于以下代码实现的是绘制出两个重叠的矩形
QPainter painter(this);
//画矩形
painter.drawRect(QRect(20,20,50,50));
painter.drawRect(QRect(20,20,50,50));
运行结果:

- 在其中间加上
painter.translate(100,0);
//画矩形
painter.drawRect(QRect(20,20,50,50));
painter.translate(100,0);
painter.drawRect(QRect(20,20,50,50));
运行结果:原先在一个位置相互重叠的矩形岔开

- 同理,绘制三个矩形
//画矩形
painter.drawRect(QRect(20,20,50,50));
//移动画家
painter.translate(100,0);
painter.drawRect(QRect(20,20,50,50));
//移动画家
painter.translate(100,0);
painter.drawRect(QRect(20,20,50,50));
运行结果:

painter.save();保存了画家移动到的新的位置,painter.restore();还原到上次painter.save();保存的地方进行绘制,这样就导致第三个与第二个矩形重叠。
//画矩形
painter.drawRect(QRect(20,20,50,50));
//移动画家
painter.translate(100,0);
//保存画家状态
painter.save();
painter.drawRect(QRect(20,20,50,50));
//移动画家
painter.translate(100,0);
//还原画家保持状态
painter.restore();
painter.drawRect(QRect(20,20,50,50));

3. 学习视频地址:QT从入门到实战x篇_28_绘图事件QPainter的高级设置
本文详细讲解了在Qt中使用高级QPainter设置,包括抗锯齿功能提升绘制质量、画家移动控制矩形位置,以及保存和恢复状态操作。通过实例演示了如何使绘图更精细和灵活。
&spm=1001.2101.3001.5002&articleId=125231633&d=1&t=3&u=c4ed18542f154797b5fafd12d32f077a)

被折叠的 条评论
为什么被折叠?



