Qt:QtPainter的坐标系统转换

1059 篇文章 286 订阅

/*
 * 1、新建QT GUI, 基类选择QWidget,取消“创建界面”
 * 2、添加资源文件qtlogn:在项目之下添加一个“resources”文件,里面存放"qtblog.png",然后
 * 文件-->新建文件/项目--->Qt---> Qt Resource File
 * 3、在widget.h中添加#include <QPainter>和重写绘画事件定义:
 * protected:
    void paintEvent(QPaintEvent *event);
 * 4、在widget.cpp中编写重绘事件
*/

1、坐标原点移动:

void Widget::paintEvent(QPaintEvent *event)
{
    QImage image("F:\\MyCode\\qtblog.png");

    QPainter painter(this);  //this表示激活画笔
    painter.setPen(QPen(Qt::blue, 1, Qt::DashLine));
    painter.drawRect(0, 0, 100, 100);

    QTransform transform;
    transform.translate(50, 50);  //将坐标从当前坐标原点沿着x轴前进50,沿着y轴前进50

    painter.setTransform(transform);
    painter.drawImage(0, 0, image);
    painter.end();
}

ed4b5db07f567715f65b5f7f30fe467a913.jpg

2、坐标系统旋转rotate

void Widget::paintEvent(QPaintEvent *event)
{
    QImage image("F:\\MyCode\\qtblog.png");

    QPainter painter(this);  //this表示激活画笔
    painter.setPen(QPen(Qt::blue, 1, Qt::DashLine));
    painter.drawRect(0, 0, 100, 100);

    QTransform transform;
    transform.translate(50, 50);  //坐标沿着x轴前进50,沿着y轴前进50
    transform.rotate(45);  //默认坐标沿着z轴旋转
   //  transform.rotate(70); 
    transform.rotate(45,Qt::ZAxis);
    painter.setTransform(transform);
    painter.drawImage(0, 0, image);
    painter.end();
}

cf62ac838ef458fd87fef714e2e6ec613f2.jpg

void Widget::paintEvent(QPaintEvent *event)
{
    QImage image("F:\\MyCode\\qtblog.png");

    QPainter painter(this);  //this表示激活画笔
    painter.setPen(QPen(Qt::blue, 1, Qt::DashLine));
    painter.drawRect(0, 0, 100, 100);

    QTransform transform;
    transform.translate(50, 50);  //坐标沿着x轴前进50,沿着y轴前进50
    transform.rotate(70,Qt::YAxis);
    painter.setTransform(transform);
    painter.drawImage(0, 0, image);
    painter.end();
}

254e011e96667137eb6ce0e5382428f69f8.jpg

void Widget::paintEvent(QPaintEvent *event)
{
    QImage image("F:\\MyCode\\qtblog.png");

    QPainter painter(this);  //this表示激活画笔
    painter.setPen(QPen(Qt::blue, 1, Qt::DashLine));
    painter.drawRect(0, 0, 100, 100);

    QTransform transform;
    transform.translate(50, 50);  //坐标沿着x轴前进50,沿着y轴前进50
    transform.rotate(80,Qt::XAxis);
    painter.setTransform(transform);  //设置当前旋转坐标为画笔坐标
    painter.drawImage(0, 0, image);
    painter.end();
}

4b231c514f58c0d9af654f74c26b1b46043.jpg

3、坐标缩放:从而实现图形缩放

void Widget::paintEvent(QPaintEvent *event)
{
    QImage image("F:\\MyCode\\qtblog.png");

    QPainter painter(this);  //this表示激活画笔
    painter.setPen(QPen(Qt::blue, 1, Qt::DashLine));
    painter.drawRect(0, 0, 100, 100);

    QTransform transform;
    transform.translate(50, 50);
    transform.rotate(45);
    transform.scale(0.5, 0.5);  //横向和纵向的缩放比例,大于1放大,小于1缩小

    painter.setTransform(transform);
    painter.drawImage(0, 0, image);
    painter.end();
}

9e21e3067e1958b9230b44bfd00995a751b.jpg

资源

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值