1. 程式人生 > 其它 >Qt之QtPainter:座標系統轉換[Qt5開發實戰]

Qt之QtPainter:座標系統轉換[Qt5開發實戰]

技術標籤:mysqlsvneventunitywindows

/*
* 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

資源