Qt之QtPainter:坐标系统转换[Qt5开发实战]

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

一、坐标原点移动:3d

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();
}

二、坐标系统旋转rotatecode

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();
}

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();
}

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();
}

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

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();
}

资源blog

相关文章
相关标签/搜索