Qt学习笔记——绘图

重写绘图事件


案例

代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QPainter"
#include "QTimer"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //实现点击按钮向右移动图片
//    connect(ui->pushButton,&QPushButton::clicked,[=](){
//        posX+=20;
//        //如果手动调用绘图事件 用update更新
//        update();
//    });

    //使用定时器向右移动图片
    QTimer *timer = new QTimer(this);
    timer->start(100);
    connect(timer,&QTimer::timeout,[=](){
        posX+=20;
        //如果手动调用绘图事件 用update更新
        update();
    });
}

void MainWindow::paintEvent(QPaintEvent *pe)
{

    /************************绘图基本设置**************************************/
    QPainter painter(this);

    //设置画笔颜色
    QPen pen(QColor(255,0,0));
    //设置画笔宽度
    pen.setWidth(5);
    //设置画笔的风格
    pen.setStyle(Qt::DotLine);
    //让画家使用笔
    painter.setPen(pen);

    //设置画刷
    QBrush brush(Qt::cyan);
    //设置画刷的风格
    brush.setStyle(Qt::Dense5Pattern);
    //让画家使用画刷
    painter.setBrush(brush);

    //画线
    painter.drawLine(QPoint(0,0),QPoint(100,100));
    //画圆 椭圆
    painter.drawEllipse(QPoint(100,100),50,50);
    //画矩形
    painter.drawRect(QRect(QPoint(20,20),QSize(50,50)));

    //画笔的画字的时候需要用font来指定大小,指定画笔的宽度没有用
    QFont font = painter.font();
    font.setPixelSize(36);
    painter.setFont(font);
    //画文字
    painter.drawText(QRect(10,200,400,100),"好好学习\n天天向上");

    /************************绘图高级设置**************************************/
    QPainter pinter2(this);
    pinter2.drawEllipse(QPoint(100,400),50,50);
    //设置抗锯齿能力  效率低
    pinter2.setRenderHint(QPainter::Antialiasing);
    pinter2.drawEllipse(QPoint(200,400),50,50);

    pinter2.drawRect(200,500,50,50);

    //参考坐标发生改变  从0,0到100,0
    pinter2.translate(100,0);
    //保存画家的状态
    pinter2.save();

    pinter2.drawRect(200,500,50,50);

    pinter2.translate(100,0);
    //还原保存画家的状态
    pinter2.restore();

    //这个矩形会被重叠,参考点的位置没有发生改变
    pinter2.drawRect(200,500,50,50);


    /************************利用画家绘制资源图片**************************************/
     QPainter pinter3(this);
     //posX在头文件中,作为全局变量
     //如果超出屏幕宽度  从初始值(400)开始
     if(posX > this->width())
     {
         posX = 400;
     }
     pinter3.drawPixmap(posX,200,QPixmap(":img/icon/b1.png"));

}

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

演示

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值