上篇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的高级设置