QT-QPainter绘图事件

首先在.h文件中声明绘图事件,alt+enter进入widget进行声明。

void Widget::paintEvent(QPaintEvent *event)
{
    //实例化一个画家对象
    //在当前widget窗口下进行画画
    QPainter painter(this);
    //设置画刷
    QBrush brush(Qt::cyan);
    painter.setBrush(brush);
    //设置画笔颜色
    QPen pen(QColor(255,152,152));
    //设置画笔风格
    pen.setStyle(Qt::DotLine);
    //设置画笔宽度
    pen.setWidth(3);
    //让画家使用这个笔
    painter.setPen(pen);
    //画线
    painter.drawLine(QPoint(0,0),QPoint(200,400));
    //画圆
    painter.drawEllipse(QPoint(100,100),60,60);
    //画矩形
    painter.drawRect(QRect(QPoint(100,100),QSize(100,20)));
    //画文字
    painter.drawText(QRect(20,20,20,20),"123");
}

绘图事件高级设置

高质量抗锯齿

    QPainter painter(this);
    QPen pen;
    pen.setWidth(3);
    painter.setPen(pen);
    painter.drawEllipse(QPoint(100,100),50,50);
    painter.setRenderHint(QPainter::HighQualityAntialiasing);//高质量抗锯齿
    painter.drawEllipse(QPoint(200,200),50,50);

 保存画家状态、恢复画家状态

    QPainter painter(this);
    QPen pen;
    pen.setWidth(3);
    painter.setPen(pen);
    //画矩形
    painter.drawRect(20,20,20,20);
    painter.translate(50,0);
    //保存画家状态
    painter.save();
    painter.drawRect(20,20,20,20);
    painter.translate(200,0);
    painter.drawRect(20,20,20,20);
    //恢复画家状态
    painter.restore();
    painter.drawRect(50,50,50,50);

 保存画家状态,painter.save();保存当前画家的状态,以便后面之间回到原先的状态

恢复画家状态,painter.restore();恢复到画家保存时的状态。

 在(50,0)的时候保存了画家的状态,画家在(50,0)的位置,在3矩形画完的时候进行画家状态恢复,从(50,0)开始画的第四个矩形。

利用QPainter画资源图片

QPainter painter(this);
painter.drawPixmap(posX,0,QPixmap(":/image/Pre employment management.png"));

1.添加按键,按键按下时图片移动

2.使用定时器,进行自动移动

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QTimer * timer = new QTimer(this);//定时器
    //按钮按下图片移动
    connect(ui->pushButton,&QPushButton::clicked,[=](){
        posX+=20;
        update();
    });
    //通过定时器开始自动移动
    timer->start(50);
    connect(timer,&QTimer::timeout,[=](){
        posX+=20;
        update();
    });
}
Widget::~Widget()
{
    delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawPixmap(posX,0,QPixmap(":/image/Pre employment management.png"));
    if(posX>this->width())
    {
        posX = 0;
    }
}

绘图设备:

1.QPixmap

定义一张名为pix的纸,将背景填充为白色,声明一个画家在pix上进行画画,画家画一个圆,将这个图片保存为E盘名为231.png的文件。

//在纸上画,得有纸的宽度长度
    QPixmap pix(300,300);
    pix.fill(Qt::white);//白色背景
    //声明画家
    QPainter painter(&pix);//往pix上画
    painter.drawEllipse(QPoint(100,100),50,50);
    //保存
    pix.save("E:/image/231.png");
}

2.QImage(可以对像素点进行操作)

将图片加载到窗口中,在窗口中进行画画,

QPainter painter(this);
    QImage img;
    img.load(":/image/Pre employment management.png");
    for(int i = 50 ; i < 100 ; i++)
    {
        for(int j = 50 ; j < 100; j++)
        {
            QRgb value = qRgb (255,0,0);
            img.setPixel(i,j,value);
        }
    }
    painter.drawImage(0,0,img);

 3.QPicture

 QPicture是一个可以记录和重现QPainter命令的绘图设备

1.在构造函数中进行记录并保存

    QPicture pic;
    QPainter painter;//可以先不指定往哪里画
    painter.begin(&pic);//开始往pic上画
    painter.setPen(QPen(Qt::cyan));
    painter.drawEllipse(QPoint(100,100),50,50);//画一个圆
    painter.end();
    pic.save("E:/image/231.zfc");//保存在E盘,后缀名可以随便写

2.在绘图事件里进行重现

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPicture pic;
    pic.load("E:/image/231.zfc");
    painter.drawPicture(100,100,pic);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值