如何自学qt(12)——绘图(上)

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);

效果如下
(看到了吗?虽然画了三个圆,移动了两次位置,但只显示另一个圆出来)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值