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

相關文章
相關標籤/搜索