QT中的绘图基本事件和简单的绘图高级设置

在 Qt 中,paintEvent(QPaintEvent *event) 是类中专门用于处理绘图的事件函数。每当需要重绘 widget(例如,设置画笔、设置画刷、设置画家等情况),Qt 会自动调用这个函数。重写这个函数后,你可以使用 QPainter 类进行绘图操作。

头文件:#include <QPainter>

下面为绘图基本事件的示例:

#include "widget.h"
#include "ui_widget.h"
#include<QPainter>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
}

void Widget::paintEvent(QPaintEvent *)//重写函数
{
     //实例化画家对象,this代表在此widget上画
    QPainter painter(this);
     //设置画笔
    QPen pen(QColor(255,0,0));//画刷颜色
    //设置笔宽
    pen.setWidth(3);
    //设置画笔风格
    pen.setStyle(Qt::DotLine);
    //画家使用
    painter.setPen(pen);

    //设置画刷
    QBrush brush(Qt::cyan);
    //画刷风格
    brush.setStyle(Qt::Dense1Pattern);
    painter.setBrush(brush);

    //画线
    painter.drawLine(QPoint(0,0),QPoint(100,100));
    //画椭圆
    painter.drawEllipse(QPoint(100,100),50,50);
    //画矩形
    painter.drawRect(QRect(20,20,50,50));
    //画文字
    painter.drawText(QRect(10,200,150,50),"文字内容");

}

Widget::~Widget()
{
    delete ui;
}

当然也可以让画家画所保存的图片:

Qpainter painter(this);
painter.drawPixmap(200,200,QPixmap(":/Image/image.png"));//根据图片位置填写

注意:void paintEvent(QPaintEvent *)函数已经在widget.h中声明

下面还有一些绘画的高级设置:

1.添加抗锯齿能力

    QPainter painter2(this);
    painter2.drawEllipse(QPoint(250,200),50,50);
    //添加抗锯齿能力(但是会降低效率)
    painter2.setRenderHint(QPainter::Antialiasing);//查询手册
    //测试
    painter2.drawEllipse(QPoint(350,200),50,50);

2.移动画家起始点

    QPainter painter3(this);
    painter3.drawRect(QRect(250,280,50,50));
    painter3.translate(100,0);//起始点设为沿x轴方向平移100,默认为(0,0)移动后为(100,0)
    painter3.drawRect(QRect(250,280,50,50));

3.保存和还原画家状态

    QPainter painter4(this);
    painter4.drawRect(QRect(250,400,50,50));//画的第一个矩形
    painter4.translate(100,0);//起始点设为沿x轴方向平移100,默认为(0,0)移动后为(100,0)
    //保存画家当前状态
    painter4.save();

    painter4.drawRect(QRect(250,400,50,50));//画的第二个矩形

    painter4.translate(100,0);//再次移动

    //还原画家状态
    painter4.restore();

    painter4.drawRect(QRect(250,400,50,50));//画的第三个矩形
    
    //4结果只有两个矩形,原因是后两个重叠在一起了

注:代码中一些专有名词如QPoint、 QRect可以查询QT的帮助手册获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值