- 类 QTransform#
QTransform类指定了坐标系的 2D 变换。更多信息…概要#
方法#
def
__init__()def
__reduce__()def
__repr__()def
adjoint()def
determinant()def
dx()def
dy()def
inverted()def
isAffine()def
isIdentity()def
isInvertible()def
isRotating()def
isScaling()def
isTranslating()def
m11()def
m12()def
m13()def
m21()def
m22()def
m23()def
m31()def
m32()def
m33()def
map()def
mapRect()def
mapToPolygon()def
__ne__()def
__mul__()def
__imul__()def
__add__()def
__iadd__()def
__sub__()def
__isub__()def
__div__()def
operator //=()def
__eq__()def
reset()def
rotate()def
rotateRadians()def
scale()def
setMatrix()def
shear()定义
translate()定义
transposed()定义
type()
静态函数#
定义
fromScale()定义
quadToQuad()
注意
此文档可能包含从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)则返回true。函数inverted()在矩阵可逆时返回该矩阵的逆矩阵的副本(否则返回单位矩阵),函数adjoint()返回矩阵的经典伴随矩阵。此外,QTransform提供了determinant()函数,返回矩阵的行列式。最后,
QTransform类支持矩阵乘法、加法和减法,并且该类的对象可以进行流处理和比较。渲染图形#
在渲染图形时,矩阵定义了转换,但实际的转换是由
QPainter中的绘图例程完成的。默认情况下,
QPainter在关联设备的坐标系上操作。一个QPaintDevice的标准坐标系其原点位于右上角。x 值向右递增;y 值向下递增。有关完整说明,请参阅坐标系文档。QPainter提供了在不需要使用QTransform的情况下,平移、缩放、切变和旋转坐标系统的功能。例如
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()可能会更高效。例如
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")
基本矩阵运算#
QTransform实例包含一个 3x3 矩阵。元素m31(dx) 和m32(dy) 指定了水平和垂直平移。元素m11和m22指定了水平和垂直缩放。元素m21和m12指定了水平和垂直的 切变。最后,元素m13和m23指定了水平和垂直的投影,其中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()函数来检索当前设置的值。平移是最简单的变换。设置
dx和dy将会沿着 X 轴将坐标系移动dx个单位,并且沿着 Y 轴移动dy个单位。通过设置m11和m22来执行缩放。例如,将m11设置为 2 并且将m22设置为 1.5 将使高度加倍并且宽度增加 50%。单位矩阵将m11、m22和m33设置为 1(其他所有设置为 0),将一个点映射为自身。剪切由m12和m21控制。将这些元素设置为非零值将会扭曲坐标系。通过设置剪切因子和缩放因子来实现旋转。透视变换是通过对投影因子和缩放因子的设置来实现的。变换的组合#
以下是一个使用基本矩阵运算的组合变换示例:

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中看到的,将矩阵转置并结合到表示点的行向量右侧,可以让变换矩阵的乘积以我们应对点应用变换的顺序出现。- class TransformationType#
常量
描述
QTransform.TxNone
QTransform.TxTranslate
QTransform.TxScale
QTransform.TxRotate
QTransform.TxShear
QTransform.TxProject
- __init__(other)#
- 参数:
other –
QTransform
- __init__()
构建一个单位矩阵。
所有元素都被设置为零,除了
m11和m22(指定缩放)和m33,它们被设置为1。另请参阅
- __init__(h11, h12, h21, h22, dx, dy)
- 参数:
h11 – float
h12 – float
h21 – float
h22 – float
dx – float
dy – float
使用元素
m11、m12、m21、m22、dx和dy构建一个矩阵。另请参阅
- __init__(h11, h12, h13, h21, h22, h23, h31, h32, h33)
- 参数:
h11 – float
h12 – float
h13 – float
h21 – float
h22 – float
h23 – float
h31 – float
h32 – float
h33 – float
使用元素
m11、m12、m13、m21、m22、m23、m31、m32、m33构建一个矩阵。另请参阅
- __reduce__()#
- 返回类型:
object
- __repr__()#
- 返回类型:
object
- adjoint()#
- 返回类型:
返回此矩阵的伴随。
- determinant()#
- 返回类型:
float
返回矩阵的行列式。
- dx()#
- 返回类型:
float
返回水平平移因子。
另请参阅
m31()translate()基本矩阵操作- dy()#
- 返回类型:
float
返回垂直平移因子。
另请参阅
translate()基本矩阵操作- 静态fromScale(dx, dy)#
- 参数:
dx – float
dy – float
- 返回类型:
创建一个矩阵,其水平缩放与
sx相对应,垂直缩放与sy相对应。这与QTransform().scale(sx, sy) 相同,但速度略快。- 静态 fromTranslate(dx, dy)#
- 参数:
dx – float
dy – float
- 返回类型:
创建一个矩阵,其对应于沿 x 轴的平移量为
dx和沿 y 轴的平移量为dy。这与QTransform().translate(dx, dy) 相同,但速度略快。- inverted()#
- 返回类型:
PyTuple
返回该矩阵的逆矩阵副本。
如果矩阵是奇异的(不可逆),返回的矩阵是单位矩阵。如果
invertible有效(即不等于 0),其值设置为真,如果矩阵是可逆的,否则设置为假。另请参阅
- isAffine()#
- 返回类型:
bool
如果矩阵表示仿射变换,则返回
true,否则返回false。- isIdentity()#
- 返回类型:
bool
如果矩阵是单位矩阵,则返回
true,否则返回false。另请参阅
- isInvertible()#
- 返回类型:
bool
如果矩阵是可逆的,则返回
true,否则返回false。另请参阅
- isRotating()#
- 返回类型:
bool
如果矩阵表示某种旋转变换,则返回
true,否则返回false。- isScaling()#
- 返回类型:
bool
如果矩阵表示缩放变换,则返回
true,否则返回false。另请参阅
- isTranslating()#
- 返回类型:
bool
如果矩阵表示平移变换,则返回
true,否则返回false。另请参阅
- m11()#
- 返回类型:
float
返回水平缩放因子。
另请参阅
scale()基本 矩阵 操作- m12()#
- 返回类型:
float
返回垂直剪切因子。
另请参阅
shear()基本 矩阵 操作- m13()#
- 返回类型:
float
返回水平投影因子。
另请参阅
translate()基本矩阵操作- m21()#
- 返回类型:
float
返回水平剪切因子。
另请参阅
shear()基本 矩阵 操作- m22()#
- 返回类型:
float
返回垂直缩放因子。
另请参阅
scale()基本 矩阵 操作- m23()#
- 返回类型:
float
返回垂直投影因子。
另请参阅
translate()基本矩阵操作- m31()#
- 返回类型:
float
返回水平平移因子。
另请参阅
dx()translate()基本 矩阵 操作- m32()#
- 返回类型:
float
返回垂直平移因子。
另请参阅
dy()translate()基本 矩阵 操作- m33()#
- 返回类型:
float
返回除法因子。
另请参阅
translate()基本矩阵操作- map(x, y)#
- 参数:
x – float
y – float
- 返回类型:
PyObject
警告
本节包含从C++自动翻译到Python的代码片段,可能存在错误。
将给定的坐标
x和y映射到由该矩阵定义的坐标系中。结果值分别放入 *``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’)则是变换后的点。
另请参阅
基本矩阵操作这是一个重载函数。
创建并返回一个
QRegion对象,它是给定区域region的一个副本,并映射到由此矩阵定义的坐标系统。如果使用旋转或剪切,调用此方法可能会相对昂贵。
这是一个重载函数。
创建并返回一个
QPolygonF对象,它是给定多边形polygon的一个副本,并映射到由此矩阵定义的坐标系统。这是一个重载函数。
创建并返回一个
QPolygon对象,它是给定多边形polygon的一个副本,并映射到由此矩阵定义的坐标系统。注意,转换后的坐标被四舍五入到最接近的整数。这是一个重载函数。
创建并返回一个QPoint对象,它是给定点
point的副本,并将其映射到由此矩阵定义的坐标系统。注意,转换后的坐标被四舍五入到最接近的整数。这是一个重载函数。
创建并返回一个QPointF对象,它是给定点,
p的副本,将其映射到由此矩阵定义的坐标系统。这是一个重载函数。
创建并返回一个QLineF对象,它是对给定线
l的一个副本,并映射到由此矩阵定义的坐标系统。这是一个重载函数。
创建并返回一个QLine对象,它是对给定
line的一个副本,并映射到由此矩阵定义的坐标系统。注意,转换后的坐标被四舍五入到最接近的整数。- map(p)
- 参数:
p –
QPainterPath- 返回类型:
这是一个重载函数。
创建并返回一个
QPainterPath对象,它是给定path的副本,并映射到由该矩阵定义的坐标系中。这是一个重载函数。
创建并返回一个 QRect 对象,它是给定
rectangle的副本,并映射到由该车矩阵定义的坐标系中。请注意,转换后的坐标将四舍五入到最接近的整数。警告
本节包含从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()Basic Matrix Operations警告
本节包含从C++自动翻译到Python的代码片段,可能存在错误。
创建并返回一个
QPolygon的表示,该表示反映了给定的rectangle,并映射到由该车矩阵定义的坐标系中。矩形的坐标使用以下公式进行转换
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()Basic Matrix Operations- __ne__(arg__1)#
- 参数:
arg__1 –
QTransform- 返回类型:
bool
如果此矩阵不等于给定的
matrix,则返回true,否则返回false。- __mul__(o)#
- 参数:
o –
QTransform- 返回类型:
返回将此矩阵与给定
矩阵相乘的结果。请注意,矩阵乘法不是交换的,即 a*b != b*a。
- __mul__(n)
- 参数:
n – float
- 返回类型:
- __imul__(arg__1)#
- 参数:
arg__1 –
QTransform- 返回类型:
这是一个重载函数。
返回将此矩阵与给定
矩阵相乘的结果。- __imul__(div)
- 参数:
div – float
- 返回类型:
这是一个重载函数。
返回将此矩阵与给定的
标量按元素相乘的结果。- __add__(n)#
- 参数:
n – float
- 返回类型:
- __iadd__(div)#
- 参数:
div – float
- 返回类型:
这是一个重载函数。
返回将给定
标量添加到本矩阵每个元素的矩阵。- __sub__(n)#
- 参数:
n – float
- 返回类型:
- __isub__(div)#
- 参数:
div – float
- 返回类型:
这是一个重载函数。
返回从本矩阵每个元素中减去给定
标量的矩阵。- __div__(n)#
- 参数:
n – float
- 返回类型:
- 操作符 /=(div)
- 参数:
div – float
- 返回类型:
这是一个重载函数。
返回将本矩阵与给定的
标量按元素相除的结果。- __eq__(arg__1)#
- 参数:
arg__1 –
QTransform- 返回类型:
bool
如果此矩阵等于给定的
矩阵,则返回true,否则返回false。- 静态 quadToQuad(one, two, result)
- 参数:
one –
QPolygonFtwo –
QPolygonFresult –
QTransform
- 返回类型:
bool
创建一个变换矩阵
trans,将四边形one映射到另一个四边形two。如果变换是可能的,则返回true;否则返回false。这是一个方便的方法,结合了
quadToSquare()和squareToQuad()方法。它允许输入四边形被转换成任何其他四边形。另请参阅
squareToQuad()quadToSquare()- 静态 quadToSquare(quad, result)
- 参数:
quad –
QPolygonFresult –
QTransform
- 返回类型:
bool
创建一个变换矩阵
trans,将四边形quad映射到一个单位正方形。如果构造了变换,则返回true;如果没有这样的变换,则返回false。另请参阅
squareToQuad()quadToQuad()- reset()#
将矩阵重置为单位矩阵,即除
m11和m22(指定缩放)及m33(设置为1)外,所有元素都设置为0。另请参阅
QTransform()isIdentity()基本 矩阵 操作这是一个重载函数。
根据指定的
axis,在距离屏幕 1024.0 的地方将坐标系逆时针旋转给定角度a,并返回矩阵的引用。请注意,如果您将
QTransform应用到在窗口坐标中定义的点,则旋转的方向将是顺时针的,因为 y 轴指向下方。角度以度为单位指定。
另请参阅
- rotate(a, axis, distanceToPlane)
- 参数:
a – float
axis –
AxisdistanceToPlane – float
- 返回类型:
根据指定的
axis,在距离屏幕distanceToPlane的地方将坐标系逆时针旋转给定角度a,并返回矩阵的引用。请注意,如果您将
QTransform应用到在窗口坐标中定义的点,则旋转的方向将是顺时针的,因为 y 轴指向下方。角度以度为单位指定。
如果
distanceToPlane为零,则将其忽略。这适用于实现正交投影,其中应丢弃而不是投影 z 轴坐标。另请参阅
根据指定的
axis,在距离屏幕distanceToPlane的地方将坐标系逆时针旋转给定角度a,并返回矩阵的引用。请注意,如果您将
QTransform应用到在窗口坐标中定义的点,则旋转的方向将是顺时针的,因为 y 轴指向下方。角度以弧度为单位指定。
如果
distanceToPlane为零,则将其忽略。这适用于实现正交投影,其中应丢弃而不是投影 z 轴坐标。另请参阅
- rotateRadians(a[, axis=Qt.ZAxis])
- 参数:
a – float
axis –
Axis
- 返回类型:
这是一个重载函数。
根据指定的
axis,在距离屏幕 1024.0 的地方将坐标系逆时针旋转给定角度a,并返回矩阵的引用。请注意,如果您将
QTransform应用到在窗口坐标中定义的点,则旋转的方向将是顺时针的,因为 y 轴指向下方。角度以弧度为单位指定。
另请参阅
- scale(sx, sy)#
- 参数:
sx – float
sy – float
- 返回类型:
以水平方向
sx和垂直方向sy缩放坐标系,并返回矩阵的引用。另请参阅
- setMatrix(m11, m12, m13, m21, m22, m23, m31, m32, m33)#
- 参数:
m11 – float
m12 – float
m13 – float
m21 – float
m22 – float
m23 – float
m31 – float
m32 – float
m33 – float
将矩阵元素设置为指定的值,
m11、m12、m13、m21、m22、m23和m31、m32以及m33。请注意,此函数将替换之前的值。《PySide6.QtGui.QTransform》提供了translate()、rotate()、scale()和shear()便捷函数来基于当前定义的坐标系操作各种矩阵元素。另请参阅
QTransform()- shear(sh, sv)#
- 参数:
sh – float
sv – float
- 返回类型:
通过
sh水平方向和sv垂直方向对坐标系进行扭曲,并返回矩阵的引用。另请参阅
- static squareToQuad(square, result)
- 参数:
square –
QPolygonFresult –
QTransform
- 返回类型:
bool
创建一个转换矩阵,
trans,将单位正方形映射到四边形,quad。如果转换可构建则返回true;如果不存在此类转换则返回false。- translate(dx, dy)#
- 参数:
dx – float
dy – float
- 返回类型:
将坐标系沿 x 轴移动
dx,沿 y 轴移动dy,并返回矩阵的引用。另请参阅
- transposed()#
- 返回类型:
返回此矩阵的转置。
返回此矩阵的变换类型。
变换类型是捕获矩阵所有变换的最高枚举值。例如,如果矩阵既缩放又倾斜,则类型将是
TxShear,因为TxShear的枚举值高于TxScale。了解矩阵的变换类型对于优化很有用:您通常可以比处理通用情况更优地处理特定类型。