PySide6.QtGui.QTransform

class QTransform

QTransform 类指定了坐标系的2D变换。更多

概要

方法

静态函数

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

变换指定了如何平移、缩放、剪切、旋转或投影坐标系,通常在渲染图形时使用。

一个QTransform对象可以使用setMatrix()scale()rotate()translate()shear()函数来构建。或者,可以通过应用基本矩阵操作来构建。矩阵也可以在构造时定义,并且可以使用reset()函数将其重置为单位矩阵(默认值)。

QTransform 类支持图形原语的映射:可以使用 map() 函数将给定的点、线、多边形、区域或绘图路径映射到由 矩阵定义的坐标系中。对于矩形,可以使用 mapRect() 函数转换其坐标。矩形也可以使用 mapToPolygon() 函数转换为 多边形(映射到由 矩阵定义的坐标系中)。

QTransform 提供了 isIdentity() 函数,如果矩阵是单位矩阵,则返回 true,以及 isInvertible() 函数,如果矩阵是非奇异矩阵(即 AB = BA = I),则返回 trueinverted() 函数返回 矩阵的逆矩阵(如果可逆,否则返回单位矩阵),而 adjoint() 返回矩阵的经典伴随矩阵。此外,QTransform 还提供了 determinant() 函数,返回矩阵的行列式。

最后,QTransform 类支持矩阵乘法、加法和减法,并且该类的对象可以被流式传输和比较。

渲染图形

在渲染图形时,矩阵定义了变换,但实际的变换是由QPainter中的绘图例程执行的。

默认情况下,QPainter 在关联设备的自身坐标系上操作。QPaintDevice 的标准坐标系的原点位于左上角。x 值向右增加;y 值向下增加。有关完整描述,请参阅坐标系文档。

QPainter 具有在不使用 QTransform 的情况下平移、缩放、剪切和旋转坐标系的函数。例如:

qtransform-simpletransformation1

def paintEvent(self, arg__0):

    painter = QPainter(self)
    painter.setPen(QPen(Qt.blue, 1, Qt.DashLine))
    painter.drawRect(0, 0, 100, 100)
    painter.rotate(45)
    painter.setFont(QFont("Helvetica", 24))
    painter.setPen(QPen(Qt.black, 1))
    painter.drawText(20, 10, "QTransform")

尽管这些函数非常方便,但如果您想执行多个变换操作,构建一个QTransform并调用setTransform()可能会更高效。例如:

qtransform-combinedtransformation2

def paintEvent(self, arg__0):

    painter = QPainter(self)
    painter.setPen(QPen(Qt.blue, 1, Qt.DashLine))
    painter.drawRect(0, 0, 100, 100)
    transform = QTransform()
    transform.translate(50, 50)
    transform.rotate(45)
    transform.scale(0.5, 1.0)
    painter.setTransform(transform)
    painter.setFont(QFont("Helvetica", 24))
    painter.setPen(QPen(Qt.black, 1))
    painter.drawText(20, 10, "QTransform")

基本矩阵操作

../../_images/qtransform-representation.png

一个QTransform对象包含一个3 x 3的矩阵。m31dx)和m32dy)元素指定水平和垂直平移。m11m22元素指定水平和垂直缩放。m21m12元素指定水平和垂直剪切。最后,m13m23元素指定水平和垂直投影,m33作为额外的投影因子。

QTransform 使用以下公式将平面中的一个点转换为另一个点:

x' = m11x + m21y + dx
y' = m22y + m12x + dy
if not isAffine():
    w' = m13x + m23y + m33
    x' /= w'
    y' /= w'

(x, y) 是原始点,而 (x’, y’) 是变换后的点。通过对 inverted() 矩阵执行相同的操作,可以将 (x’, y’) 转换回 (x, y)

在构造矩阵时,或者稍后使用setMatrix()函数时,可以设置各种矩阵元素。它们也可以使用translate()rotate()scale()shear()等便利函数进行操作。当前设置的值可以使用m11()m12()m13()m21()m22()m23()m31()m32()m33()dx()dy()函数来检索。

平移是最简单的变换。设置dxdy将使坐标系沿X轴移动dx个单位,沿Y轴移动dy个单位。缩放可以通过设置m11m22来实现。例如,将m11设置为2,m22设置为1.5将使高度加倍,宽度增加50%。单位矩阵的m11m22m33设置为1(其他所有设置为0),将点映射到自身。剪切由m12m21控制。将这些元素设置为非零值将扭曲坐标系。旋转通过同时设置剪切因子和缩放因子来实现。透视变换通过同时设置投影因子和缩放因子来实现。

组合变换

这是使用基本矩阵操作的组合变换示例:

qtransform-combinedtransformation23

def paintEvent(self, arg__0):

    a = qDegreesToRadians(45.0)
    sina = sin(a)
    cosa = cos(a)
    scale = QTransform(0.5, 0, 0, 1.0, 0, 0)
    rotate = QTransform(cosa, sina, -sina, cosa, 0, 0)
    translate = QTransform(1, 0, 0, 1, 50.0, 50.0)
    transform = scale * rotate * translate
    painter = QPainter(self)
    painter.setPen(QPen(Qt.blue, 1, Qt.DashLine))
    painter.drawRect(0, 0, 100, 100)
    painter.setTransform(transform)
    painter.setFont(QFont("Helvetica", 24))
    painter.setPen(QPen(Qt.black, 1))
    painter.drawText(20, 10, "QTransform")

组合变换首先对每个操作数进行缩放,然后旋转,最后平移,就像其因子乘积的书写顺序一样。这意味着应用变换的点隐式地与其右侧的变换相乘。

与矩阵表示法的关系

QTransform中的矩阵表示法是一种常见的教学惯例的转置,该惯例将变换和点表示为矩阵和向量。该惯例将矩阵乘以左侧,列向量乘以右侧。换句话说,当对一个点应用多个变换时,最右侧的矩阵首先直接作用于向量。然后左侧的下一个矩阵作用于第一个操作的结果——依此类推。因此,该惯例在构成复合变换的矩阵相乘时,顺序与QTransform中的顺序相反,正如你在Combining Transforms中看到的那样。转置矩阵并将它们组合到表示点的行向量的右侧,使得变换的矩阵在它们的乘积中按照我们想象中变换应用于点的顺序出现。

另请参阅

QPainter 坐标系 仿射 变换 示例变换 示例

class TransformationType

常量

描述

QTransform.TxNone

QTransform.TxTranslate

QTransform.TxScale

QTransform.TxRotate

QTransform.TxShear

QTransform.TxProject

__init__()

构造一个单位矩阵。

除了m11m22(指定比例)以及m33被设置为1之外,所有元素都被设置为零。

另请参阅

reset()

__init__(other)
Parameters:

其他QTransform

__init__(h11, h12, h21, h22, dx, dy)
Parameters:
  • h11 – 浮点数

  • h12 – 浮点数

  • h21 – 浮点数

  • h22 – 浮点数

  • dx – 浮点数

  • dy – 浮点数

使用元素 m11, m12, m21, m22, dxdy 构造一个矩阵。

另请参阅

setMatrix()

__init__(h11, h12, h13, h21, h22, h23, h31, h32, h33)
Parameters:
  • h11 – 浮点数

  • h12 – 浮点数

  • h13 – 浮点数

  • h21 – 浮点数

  • h22 – 浮点数

  • h23 – 浮点数

  • h31 – 浮点数

  • h32 – 浮点数

  • h33 – 浮点数

使用元素 m11, m12, m13, m21, m22, m23, m31, m32, m33 构造一个矩阵。

另请参阅

setMatrix()

__reduce__()
Return type:

字符串

__repr__()
Return type:

字符串

adjoint()
Return type:

QTransform

返回此矩阵的伴随矩阵。

determinant()
Return type:

浮点数

返回矩阵的行列式。

dx()
Return type:

浮点数

返回水平平移因子。

另请参阅

m31() translate() 基本 矩阵 操作

dy()
Return type:

浮点数

返回垂直平移因子。

另请参阅

translate() 基本 矩阵 操作

static fromScale(dx, dy)
Parameters:
  • dx – 浮点数

  • dy – 浮点数

Return type:

QTransform

创建一个矩阵,该矩阵对应于水平方向上的缩放sx和垂直方向上的缩放sy。这与QTransform() .scale(sx, sy)相同,但速度稍快。

static fromTranslate(dx, dy)
Parameters:
  • dx – 浮点数

  • dy – 浮点数

Return type:

QTransform

创建一个矩阵,该矩阵对应于沿x轴平移dx和沿y轴平移dy。这与QTransform() .translate(dx, dy)相同,但速度稍快。

inverted()
Return type:

PyTuple

返回此矩阵的倒置副本。

如果矩阵是奇异的(不可逆的),返回的矩阵是单位矩阵。如果invertible是有效的(即不为0),当矩阵可逆时,其值设置为true,否则设置为false。

另请参阅

isInvertible()

isAffine()
Return type:

布尔

如果矩阵表示一个仿射变换,则返回 true,否则返回 false

isIdentity()
Return type:

布尔

如果矩阵是单位矩阵,则返回 true,否则返回 false

另请参阅

reset()

isInvertible()
Return type:

布尔

如果矩阵是可逆的,则返回 true,否则返回 false

另请参阅

inverted()

isRotating()
Return type:

布尔

如果矩阵表示某种旋转变换,则返回 true,否则返回 false

注意

180度和/或360度的旋转变换被视为缩放变换。

另请参阅

reset()

isScaling()
Return type:

布尔

如果矩阵表示缩放变换,则返回 true,否则返回 false

另请参阅

reset()

isTranslating()
Return type:

布尔

如果矩阵表示一个平移变换,则返回 true,否则返回 false

另请参阅

reset()

m11()
Return type:

浮点数

返回水平缩放因子。

另请参阅

scale() 基础 矩阵 操作

m12()
Return type:

浮点数

返回垂直剪切因子。

另请参阅

shear() 基本 矩阵 操作

m13()
Return type:

浮点数

返回水平投影因子。

另请参阅

translate() 基本 矩阵 操作

m21()
Return type:

浮点数

返回水平剪切因子。

另请参阅

shear() 基本 矩阵 操作

m22()
Return type:

浮点数

返回垂直缩放因子。

另请参阅

scale() 基本 矩阵 操作

m23()
Return type:

浮点数

返回垂直投影因子。

另请参阅

translate() 基本 矩阵 操作

m31()
Return type:

浮点数

返回水平平移因子。

另请参阅

dx() translate() 基础 矩阵 操作

m32()
Return type:

浮点数

返回垂直平移因子。

另请参阅

dy() translate() 基本 矩阵 操作

m33()
Return type:

浮点数

返回除法因子。

另请参阅

translate() 基本 矩阵 操作

map(l)
Parameters:

lQLine

Return type:

QLine

这是一个重载函数。

创建并返回一个QLineF对象,该对象是给定线l的副本,映射到此矩阵定义的坐标系中。

map(l)
Parameters:

lQLineF

Return type:

QLineF

这是一个重载函数。

创建并返回一个QLine对象,该对象是给定line的副本,映射到此矩阵定义的坐标系中。请注意,转换后的坐标会四舍五入到最接近的整数。

map(p)
Parameters:

pQPainterPath

Return type:

QPainterPath

这是一个重载函数。

创建并返回一个QPainterPath对象,该对象是给定path的副本,映射到此矩阵定义的坐标系中。

map(p)
Parameters:

pQPoint

Return type:

QPoint

这是一个重载函数。

创建并返回一个QPoint对象,该对象是给定point的副本,映射到此矩阵定义的坐标系中。请注意,转换后的坐标将四舍五入到最接近的整数。

map(p)
Parameters:

pQPointF

Return type:

QPointF

这是一个重载函数。

创建并返回一个QPointF对象,该对象是给定点p的副本,映射到此矩阵定义的坐标系中。

map(a)
Parameters:

aQPolygon

Return type:

QPolygon

这是一个重载函数。

创建并返回一个QPolygon对象,该对象是给定polygon的副本,映射到此矩阵定义的坐标系中。注意,转换后的坐标会四舍五入到最接近的整数。

map(a)
Parameters:

aQPolygonF

Return type:

QPolygonF

这是一个重载函数。

创建并返回一个QPolygonF对象,该对象是给定polygon的副本,映射到此矩阵定义的坐标系中。

map(r)
Parameters:

rQRegion

Return type:

QRegion

这是一个重载函数。

创建并返回一个QRegion对象,该对象是给定region的副本,映射到此矩阵定义的坐标系中。

如果使用旋转或剪切,调用此方法可能会相当昂贵。

map(x, y)
Parameters:
  • x – 浮点数

  • y – 浮点数

Return type:

PyObject

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

将给定的坐标 xy 映射到由该矩阵定义的坐标系中。结果值分别放入 *``tx`` 和 *``ty`` 中。

坐标使用以下公式进行转换:

x' = m11x + m21y + dx
y' = m22y + m12x + dy
if not isAffine():
    w' = m13x + m23y + m33
    x' /= w'
    y' /= w'

点 (x, y) 是原始点,而 (x’, y’) 是变换后的点。

另请参阅

基本 矩阵 操作

mapRect(rectangle)
Parameters:

矩形QRect

Return type:

QRect

这是一个重载函数。

创建并返回一个QRect对象,该对象是给定rectangle的副本,映射到此矩阵定义的坐标系中。请注意,转换后的坐标会四舍五入到最接近的整数。

mapRect(rectangle)
Parameters:

矩形QRectF

Return type:

QRectF

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

创建并返回一个QRectF对象,该对象是给定rectangle的副本,映射到此矩阵定义的坐标系中。

矩形的坐标使用以下公式进行转换:

x' = m11x + m21y + dx
y' = m22y + m12x + dy
if not isAffine():
    w' = m13x + m23y + m33
    x' /= w'
    y' /= w'

如果已经指定了旋转或剪切,此函数将返回边界矩形。要检索给定rectangle映射到的确切区域,请改用mapToPolygon()函数。

另请参阅

mapToPolygon() 基础 矩阵 操作

mapToPolygon(r)
Parameters:

rQRect

Return type:

QPolygon

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

创建并返回给定rectangleQPolygon表示,映射到此矩阵定义的坐标系中。

矩形的坐标使用以下公式进行转换:

x' = m11x + m21y + dx
y' = m22y + m12x + dy
if not isAffine():
    w' = m13x + m23y + m33
    x' /= w'
    y' /= w'

多边形和矩形在变换时表现略有不同(由于整数舍入),所以 matrix.map(QPolygon(rectangle)) 并不总是与 matrix.mapToPolygon(rectangle) 相同。

另请参阅

mapRect() 基本 矩阵 操作

__ne__(matrix)
Parameters:

矩阵QTransform

Return type:

布尔

如果此矩阵不等于给定的matrix,则返回true,否则返回false

__mul__(o)
Parameters:

oQTransform

Return type:

QTransform

返回此矩阵与给定matrix相乘的结果。

请注意,矩阵乘法是不可交换的,即 a*b != b*a。

__mul__(n)
Parameters:

n – 浮点数

Return type:

QTransform

__imul__(matrix)
Parameters:

矩阵QTransform

Return type:

QTransform

这是一个重载函数。

返回此矩阵与给定matrix相乘的结果。

__imul__(div)
Parameters:

div – 浮动

Return type:

QTransform

这是一个重载函数。

返回此矩阵与给定scalar进行逐元素相乘的结果。

__add__(n)
Parameters:

n – 浮点数

Return type:

QTransform

__iadd__(div)
Parameters:

div – 浮动

Return type:

QTransform

这是一个重载函数。

返回通过将给定的scalar添加到该矩阵的每个元素所获得的矩阵。

__sub__(n)
Parameters:

n – 浮点数

Return type:

QTransform

__isub__(div)
Parameters:

div – 浮动

Return type:

QTransform

这是一个重载函数。

返回通过从该矩阵的每个元素中减去给定的scalar获得的矩阵。

__div__(n)
Parameters:

n – 浮点数

Return type:

QTransform

operator/=(div)
Parameters:

div – 浮动

Return type:

QTransform

这是一个重载函数。

返回将此矩阵逐元素除以给定的scalar的结果。

__eq__(matrix)
Parameters:

矩阵QTransform

Return type:

布尔

如果此矩阵等于给定的matrix,则返回true,否则返回false

static quadToQuad(one, two)
Parameters:
Return type:

对象

static quadToQuad(one, two, result)
Parameters:
Return type:

布尔

创建一个变换矩阵,trans,将一个四边形,one,映射到另一个四边形,two。如果变换可能,则返回true;否则返回false。

这是一个结合了quadToSquare()squareToQuad()方法的便捷方法。它允许将输入四边形转换为任何其他四边形。

static quadToSquare(arg__1)
Parameters:

arg__1QPolygonF

Return type:

对象

static quadToSquare(quad, result)
Parameters:
Return type:

布尔

创建一个变换矩阵,trans,它将一个四边形,quad,映射到一个单位正方形。如果变换被成功构建,则返回true;如果这样的变换不存在,则返回false。

reset()

将矩阵重置为单位矩阵,即所有元素设置为零,除了m11m22(指定比例)以及m33,它们被设置为1。

另请参阅

QTransform() isIdentity() 基本 矩阵 操作

rotate(a[, axis=Qt.ZAxis])
Parameters:
  • a – 浮点数

  • axisAxis

Return type:

QTransform

这是一个重载函数。

将坐标系以给定的角度 a 绕指定的 axis 逆时针旋转,距离屏幕 1024.0,并返回矩阵的引用。

请注意,如果您将QTransform应用于在小部件坐标中定义的点,旋转方向将是顺时针的,因为y轴指向下方。

角度以度为单位指定。

另请参阅

setMatrix

rotate(a, axis, distanceToPlane)
Parameters:
  • a – 浮点数

  • axisAxis

  • distanceToPlane – 浮点数

Return type:

QTransform

将坐标系按给定角度 a 逆时针旋转,围绕指定的 axis 轴,距离屏幕 distanceToPlane,并返回矩阵的引用。

请注意,如果您将QTransform应用于在小部件坐标中定义的点,旋转方向将是顺时针的,因为y轴指向下方。

角度以度为单位指定。

如果 distanceToPlane 为零,它将被忽略。这适用于实现正交投影,其中 z 坐标应被丢弃而不是投影。

另请参阅

setMatrix()

rotateRadians(a[, axis=Qt.ZAxis])
Parameters:
  • a – 浮点数

  • axisAxis

Return type:

QTransform

这是一个重载函数。

将坐标系以给定的角度 a 绕指定的 axis 逆时针旋转,距离屏幕 1024.0,并返回矩阵的引用。

请注意,如果您将QTransform应用于在小部件坐标中定义的点,旋转方向将是顺时针的,因为y轴指向下方。

角度以弧度指定。

另请参阅

setMatrix()

rotateRadians(a, axis, distanceToPlane)
Parameters:
  • a – 浮点数

  • axisAxis

  • distanceToPlane – 浮点数

Return type:

QTransform

将坐标系按给定的角度 a 逆时针旋转,围绕指定的 axis 轴,距离屏幕 distanceToPlane,并返回矩阵的引用。

请注意,如果您将QTransform应用于在小部件坐标中定义的点,旋转方向将是顺时针的,因为y轴指向下方。

角度以弧度为单位指定。

如果 distanceToPlane 为零,它将被忽略。这适用于实现正交投影,其中 z 坐标应该被丢弃而不是投影。

另请参阅

setMatrix()

scale(sx, sy)
Parameters:
  • sx – 浮点数

  • sy – 浮点数

Return type:

QTransform

将坐标系水平缩放 sx,垂直缩放 sy,并返回矩阵的引用。

另请参阅

setMatrix()

setMatrix(m11, m12, m13, m21, m22, m23, m31, m32, m33)
Parameters:
  • m11 – 浮点数

  • m12 – 浮点数

  • m13 – 浮点数

  • m21 – 浮点数

  • m22 – 浮点数

  • m23 – 浮点数

  • m31 – 浮点数

  • m32 – 浮点数

  • m33 – 浮点数

将矩阵元素设置为指定的值,m11, m12, m13 m21, m22, m23 m31, m32m33。请注意,此函数会替换之前的值。QTransform 提供了 translate()rotate()scale()shear() 便利函数,用于基于当前定义的坐标系操作各种矩阵元素。

另请参阅

QTransform()

shear(sh, sv)
Parameters:
  • sh – 浮点数

  • sv – 浮点数

Return type:

QTransform

通过sh水平剪切和sv垂直剪切坐标系,并返回矩阵的引用。

另请参阅

setMatrix()

static squareToQuad(arg__1)
Parameters:

arg__1QPolygonF

Return type:

对象

static squareToQuad(square, result)
Parameters:
Return type:

布尔

创建一个变换矩阵,trans,它将一个单位正方形映射到一个四边形,quad。如果变换被成功构建,则返回true;如果这样的变换不存在,则返回false。

translate(dx, dy)
Parameters:
  • dx – 浮点数

  • dy – 浮点数

Return type:

QTransform

将坐标系沿x轴移动dx,沿y轴移动dy,并返回矩阵的引用。

另请参阅

setMatrix()

transposed()
Return type:

QTransform

返回此矩阵的转置。

type()
Return type:

TransformationType

返回此矩阵的变换类型。

变换类型是捕获矩阵所有变换的最高枚举值。例如,如果矩阵同时进行缩放和剪切,类型将是TxShear,因为TxShear的枚举值高于TxScale

了解矩阵的变换类型对优化很有用:通常你可以比处理一般情况更优化地处理特定类型。