Qt之图形(转换)

简介: 简述QTransform 用于指定坐标系的 2D 转换 - 平移、缩放、扭曲(剪切)、旋转或投影坐标系。绘制图形时,通常会使用。QTransform 与 QMatrix 不同之处在于,它是一个真正的 3x3 矩阵,允许视角转换,QTransform 的 toAffine() 方法允许将 QTransform 转换到 QMatrix。如果视角转换已在矩阵指定,则转换将导

简述

QTransform 用于指定坐标系的 2D 转换 - 平移、缩放、扭曲(剪切)、旋转或投影坐标系。绘制图形时,通常会使用。

QTransform 与 QMatrix 不同之处在于,它是一个真正的 3x3 矩阵,允许视角转换,QTransform 的 toAffine() 方法允许将 QTransform 转换到 QMatrix。如果视角转换已在矩阵指定,则转换将导致数据丢失。

常用接口

  • translate(qreal dx, qreal dy):平移 - 对坐标系沿着 x 轴移动 dx、沿 y 轴移动 dy
  • scale(qreal sx, qreal sy):缩放 - 通过水平的 sx 和垂直的 sy 缩放坐标系
  • rotate(qreal angle, Qt::Axis axis = Qt::ZAxis):旋转 - 对指定的轴用给定的角度反时针旋转坐标系统
  • shear(qreal sh, qreal sv):扭曲 - 通过水平的 sh 和垂直的 sv 扭曲坐标系
  • reset():重置为单位矩阵

基本使用

先来看基本使用:

这里写图片描述

这里,我们在从坐标原点 (0, 0) 位置开始,大小为 150 * 150 的区域内,绘制了一张图片。

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);

    painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}

平移

translate() 可将坐标原点变更为指定的坐标点 (x, y)。

这里写图片描述

这里,将坐标原点由 (0, 0) 变为 (120, 20)。

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);

    QTransform transform;
    // 平移
    transform.translate(120, 20);

    painter.setTransform(transform);
    painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}

旋转

rotate() 使用角度技巧表示远近。设置第二个参数为角度的常量值后,可以使用 X 轴、Y 轴、Z 轴技巧。它默认是以原点为中心进行旋转的,如果要改变旋转的中心,可以使用 translate() 函数完成。

Qt::XAxis Qt::YAxis Qt::ZAxis
这里写图片描述 这里写图片描述 这里写图片描述
void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);

    QTransform transform;
    // 平移
    transform.translate(120, 20);
    // 旋转
    transform.rotate(45, Qt::XAxis);

    painter.setTransform(transform);
    painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}

缩放

scale() 可以进行缩放。

这里写图片描述

这里,使绘制的图像缩小到原来的一半。

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);

    QTransform transform;
    // 平移
    transform.translate(120, 20);
    // 旋转
    transform.rotate(45);
    // 缩放
    transform.scale(0.5, 0.5);

    painter.setTransform(transform);
    painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}

扭曲

shear() 可以实现图片的扭曲。它有两个参数,前面的参数实现横向变形,后面的参数实现纵向变形。当它们的值为 0 时,表示不扭曲。

这里写图片描述

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);

    QTransform transform;
    // 横向扭曲
    transform.shear(0.5, 0);

    painter.setTransform(transform);
    painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}
目录
相关文章
|
存储
QT图形视图框架绘制曲线图和Smith图
QT图形视图框架绘制曲线图和Smith图
329 0
|
数据可视化 图形学 开发者
【Qt 底层机制之图形渲染引擎】深入理解 Qt 的 渲染机制:从基础渲染到高级图形
【Qt 底层机制之图形渲染引擎】深入理解 Qt 的 渲染机制:从基础渲染到高级图形
1749 4
《QT从基础到进阶·二十六》绘制多个图形项(QGraphicsRectItem,QGraphicsLineItem,QGraphicsPolygonItem)
《QT从基础到进阶·二十六》绘制多个图形项(QGraphicsRectItem,QGraphicsLineItem,QGraphicsPolygonItem)
433 0
|
XML Linux C++
【Qt】图形化和纯代码实现Hello world的比较
【Qt】图形化和纯代码实现Hello world的比较
|
编解码 供应链 开发工具
英飞凌采用Qt图形解决方案增强Traveo T2G MCU系列,实现智能渲染技术
在竞争激烈的全球半导体市场,制造商一直在努力缩短产品上市时间。同时,他们对流畅、高分辨率图形显示器的需求也在日益增长。
|
数据可视化 计算机视觉
QT基础教程(图形处理)
QT基础教程(图形处理)
167 0
|
存储 数据可视化 测试技术
[Qt5] QGraphics图形视图框架概述(Item、Scene和View)
[Qt5] QGraphics图形视图框架概述(Item、Scene和View)
2334 0
|
缓存
《QT从基础到进阶·二十二》QGraphicsView显示大量图形项item导致界面卡顿的解决办法
《QT从基础到进阶·二十二》QGraphicsView显示大量图形项item导致界面卡顿的解决办法
1189 0
QT图形视图系统 - 使用一个项目来学习QT的图形视图框架 - 终篇
接上一篇,我们需要继续完成以下的效果; 先上个效果图:
208 1
|
图形学 容器
QT5图形视图框架
GraphicsView (图形视图)框架结构取代了之前版本中的QCanvas模块,它提 供基于图元的模型/视图编程,类似于QtlnterView的模型/视图结构,只是这里的数据是图形。
200 0

热门文章

最新文章

推荐镜像

更多
  • qt