Qt_08

基本绘图事件

    void paintEvent(QPaintEvent *);

先在widget.h中声明


重写paintEvent函数

#include <QPainter>


void Widget::paintEvent(QPaintEvent *){
    QPainter painter(this);         // 画家painter在this上作画  this就是Widget

    // 设置画笔
    QPen p(QColor(255,0,0));

    // 设置笔
    p.setWidth(2);
    p.setStyle(Qt::DotLine);
    // 拿起笔
    painter.setPen(p);

    // 画刷  给封闭图案填充颜色
    QBrush brush(Qt::cyan);

    // 设置画刷
    brush.setStyle(Qt::Dense6Pattern);

    painter.setBrush(brush);

    // 画线
    painter.drawLine(QPoint(0,0),QPoint(100,100));

    // 画圆  但没有特别画圆的函数  这里是椭圆ellipse  第二三个参数rx ry看效果图也能猜出来是什么
    painter.drawEllipse(QPoint(100,100),50,50);

    painter.drawEllipse(QPoint(200,200),100,50);

    // 画矩形
    painter.drawRect(QRect(QPoint(300,300),QPoint(320,320)));

    // 画 字
    painter.drawText(QRect(10,300,200,200),"生活");

}




高级绘图事件

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

    posx=10;

    // 少了个 = 你就报错??   报错的原因也看不懂
    connect(ui->btn,&QPushButton::clicked,[=](){
        posx+=20;
        update();       //更新图片的位置

    });

}


void Widget::paintEvent(QPaintEvent *){
    QPainter painter(this);         // 画家painter在this上作画  this就是Widget

    // 超出边界 重置初始位置
    if(posx>this->width()) posx=10;

    
    
    QPixmap pix = QPixmap(":/2.jpg");
    // 设置图片大小 第三个参数 保持纵横比
    pix = pix.scaled(200,200,Qt::KeepAspectRatio);
    //绘制图片
    painter.drawPixmap(posx,100,pix);







    painter.drawEllipse(QPoint(200,200),100,100);

    // 设置抗锯齿   但效率降低
    painter.setRenderHint(QPainter::Antialiasing);

    painter.drawEllipse(QPoint(500,200),100,100);


    painter.drawRect(QRect(20,20,50,50));

    painter.drawRect(QRect(100,80,50,50));

    // 移动了画家的坐标原点
    painter.translate(100,0);

    // 保存状态
    painter.save();

    painter.drawRect(QRect(20,20,50,50));

    // 还原状态
    painter.restore();

    painter.drawRect(QRect(20,20,50,50));
}


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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值