1,在头文件中添加绘图事件
//paint.cpp
void paintEvent(QPaintEvent *event);
2,在窗体函数里实现事件
具体功能见注释
#include<QPainter> //画家类
//实例一个画家对象,this指定绘图设备
QPainter painter(this);
//画线
void Widget::paintEvent(QPaintEvent *event)
{
//实例一个画家对象,this指定绘图设备
QPainter painter(this);
//画线
painter.drawLine(QPoint(0,0),QPoint(100,100));
//画椭圆
painter.drawEllipse(QPoint(100,100),50,50);//这是椭圆类,三个参数为圆心,x轴长和y轴长,xy相同就是圆
//画矩形
painter.drawRect(QRect(50,50,50,50));//这是矩形类
//画文字
painter.drawText(QRect(10,200,100,50),"我爱你,亿万斯年");//在框的内部写文字,框不显示
//设置画笔颜色
QPen pen(QColor(255,0,0));//颜色的显示和界面那里介绍的相同
//设置线条风格
pen.setStyle(Qt::DashDotDotLine);
//使用画笔
painter.setPen(pen);
//再画一个圆
painter.drawEllipse(QPoint(300,200),50,50);
//要给圆填充颜色,先要设置画刷
QBrush brush(QColor(Qt::blue));//颜色的另一种方便的表示方式
//使用画刷
painter.setBrush(brush);
//再画一个矩形
painter.drawRect(QRect(300,100,40,60));
}
3,效果图
4,另
①画笔要先设置才能起作用
②要善于使用帮助文档
我们可以看到,还可以设置宽度啥的(默认宽度为1),如果想看具体的可以点进去,比如设计线条风格(setstyle)这里
点下面的penstyle,就可以看线条风格的枚举值以及对应的效果
5,绘画的高级设置
1,使图像边缘更清晰
//学名叫抗锯齿化
painter.setRenderHint(QPainter::Antialiasing);
这么写的原因可以在帮助文档里搜一下
点击参数,我们可以发现
可以看到前面的参量是一个枚举值,这里我们选择第一个
运行后,能看见第二个圆画的比较好
【但会降低程序运行的效率】
2,移动
QPainter painter(this);
painter.drawEllipse(QPoint(100,100),50,50);
// 移动位置
painter.translate(100,100);
painter.drawEllipse(QPoint(100,100),50,50);
效果图
当然,频繁的改变之前的控件位置是件麻烦的事情,所以我们可以保存画家的位置
QPainter painter(this);
painter.drawEllipse(QPoint(100,100),50,50);
// 移动位置
painter.translate(100,100);
//保存一下
painter.save();
painter.drawEllipse(QPoint(100,100),50,50);
painter.translate(100,100);
//还原状态
painter.restore();
//再画一个
painter.drawEllipse(QPoint(100,100),50,50);
效果如下
(看到了吗?虽然画了三个圆,移动了两次位置,但只显示另一个圆出来)