PySide6.QtGui.QTransform¶
- class 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()def
translate()def
transposed()def
type()
静态函数¶
def
fromScale()def
fromTranslate()def
quadToQuad()def
quadToSquare()def
squareToQuad()
注意
本文档可能包含从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对象包含一个3 x 3的矩阵。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__()¶
构造一个单位矩阵。
除了
m11和m22(指定比例)以及m33被设置为1之外,所有元素都被设置为零。另请参阅
- __init__(other)
- Parameters:
其他 –
QTransform
- __init__(h11, h12, h21, h22, dx, dy)
- Parameters:
h11 – 浮点数
h12 – 浮点数
h21 – 浮点数
h22 – 浮点数
dx – 浮点数
dy – 浮点数
使用元素
m11,m12,m21,m22,dx和dy构造一个矩阵。另请参阅
- __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构造一个矩阵。另请参阅
- __reduce__()¶
- Return type:
字符串
- __repr__()¶
- Return type:
字符串
- adjoint()¶
- Return type:
返回此矩阵的伴随矩阵。
- determinant()¶
- Return type:
浮点数
返回矩阵的行列式。
- dx()¶
- Return type:
浮点数
返回水平平移因子。
另请参阅
m31()translate()基本 矩阵 操作- dy()¶
- Return type:
浮点数
返回垂直平移因子。
另请参阅
translate()基本 矩阵 操作- static fromScale(dx, dy)¶
- Parameters:
dx – 浮点数
dy – 浮点数
- Return type:
创建一个矩阵,该矩阵对应于水平方向上的缩放
sx和垂直方向上的缩放sy。这与QTransform().scale(sx, sy)相同,但速度稍快。- static fromTranslate(dx, dy)¶
- Parameters:
dx – 浮点数
dy – 浮点数
- Return type:
创建一个矩阵,该矩阵对应于沿x轴平移
dx和沿y轴平移dy。这与QTransform().translate(dx, dy)相同,但速度稍快。- inverted()¶
- Return type:
PyTuple
返回此矩阵的倒置副本。
如果矩阵是奇异的(不可逆的),返回的矩阵是单位矩阵。如果
invertible是有效的(即不为0),当矩阵可逆时,其值设置为true,否则设置为false。另请参阅
- isAffine()¶
- Return type:
布尔
如果矩阵表示一个仿射变换,则返回
true,否则返回false。- isIdentity()¶
- Return type:
布尔
如果矩阵是单位矩阵,则返回
true,否则返回false。另请参阅
- isInvertible()¶
- Return type:
布尔
如果矩阵是可逆的,则返回
true,否则返回false。另请参阅
- isRotating()¶
- Return type:
布尔
如果矩阵表示某种旋转变换,则返回
true,否则返回false。- isScaling()¶
- Return type:
布尔
如果矩阵表示缩放变换,则返回
true,否则返回false。另请参阅
- isTranslating()¶
- Return type:
布尔
如果矩阵表示一个平移变换,则返回
true,否则返回false。另请参阅
- 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()基本 矩阵 操作这是一个重载函数。
创建并返回一个QLineF对象,该对象是给定线
l的副本,映射到此矩阵定义的坐标系中。这是一个重载函数。
创建并返回一个QLine对象,该对象是给定
line的副本,映射到此矩阵定义的坐标系中。请注意,转换后的坐标会四舍五入到最接近的整数。- map(p)
- Parameters:
p –
QPainterPath- Return type:
这是一个重载函数。
创建并返回一个
QPainterPath对象,该对象是给定path的副本,映射到此矩阵定义的坐标系中。这是一个重载函数。
创建并返回一个QPoint对象,该对象是给定
point的副本,映射到此矩阵定义的坐标系中。请注意,转换后的坐标将四舍五入到最接近的整数。这是一个重载函数。
创建并返回一个QPointF对象,该对象是给定点
p的副本,映射到此矩阵定义的坐标系中。这是一个重载函数。
创建并返回一个
QPolygon对象,该对象是给定polygon的副本,映射到此矩阵定义的坐标系中。注意,转换后的坐标会四舍五入到最接近的整数。这是一个重载函数。
创建并返回一个
QPolygonF对象,该对象是给定polygon的副本,映射到此矩阵定义的坐标系中。这是一个重载函数。
创建并返回一个
QRegion对象,该对象是给定region的副本,映射到此矩阵定义的坐标系中。如果使用旋转或剪切,调用此方法可能会相当昂贵。
- map(x, y)
- Parameters:
x – 浮点数
y – 浮点数
- Return type:
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’) 是变换后的点。
另请参阅
基本 矩阵 操作这是一个重载函数。
创建并返回一个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()基础 矩阵 操作警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
创建并返回给定
rectangle的QPolygon表示,映射到此矩阵定义的坐标系中。矩形的坐标使用以下公式进行转换:
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:
o –
QTransform- Return type:
返回此矩阵与给定
matrix相乘的结果。请注意,矩阵乘法是不可交换的,即 a*b != b*a。
- __mul__(n)
- Parameters:
n – 浮点数
- Return type:
- __imul__(matrix)¶
- Parameters:
矩阵 –
QTransform- Return type:
这是一个重载函数。
返回此矩阵与给定
matrix相乘的结果。- __imul__(div)
- Parameters:
div – 浮动
- Return type:
这是一个重载函数。
返回此矩阵与给定
scalar进行逐元素相乘的结果。- __add__(n)¶
- Parameters:
n – 浮点数
- Return type:
- __iadd__(div)¶
- Parameters:
div – 浮动
- Return type:
这是一个重载函数。
返回通过将给定的
scalar添加到该矩阵的每个元素所获得的矩阵。- __sub__(n)¶
- Parameters:
n – 浮点数
- Return type:
- __isub__(div)¶
- Parameters:
div – 浮动
- Return type:
这是一个重载函数。
返回通过从该矩阵的每个元素中减去给定的
scalar获得的矩阵。- __div__(n)¶
- Parameters:
n – 浮点数
- Return type:
- operator/=(div)
- Parameters:
div – 浮动
- Return type:
这是一个重载函数。
返回将此矩阵逐元素除以给定的
scalar的结果。- __eq__(matrix)¶
- Parameters:
矩阵 –
QTransform- Return type:
布尔
如果此矩阵等于给定的
matrix,则返回true,否则返回false。- static quadToQuad(one, two, result)
- Parameters:
一 –
QPolygonFtwo –
QPolygonF结果 –
QTransform
- Return type:
布尔
创建一个变换矩阵,
trans,将一个四边形,one,映射到另一个四边形,two。如果变换可能,则返回true;否则返回false。这是一个结合了
quadToSquare()和squareToQuad()方法的便捷方法。它允许将输入四边形转换为任何其他四边形。- static quadToSquare(quad, result)
- Parameters:
quad –
QPolygonF结果 –
QTransform
- Return type:
布尔
创建一个变换矩阵,
trans,它将一个四边形,quad,映射到一个单位正方形。如果变换被成功构建,则返回true;如果这样的变换不存在,则返回false。- reset()¶
将矩阵重置为单位矩阵,即所有元素设置为零,除了
m11和m22(指定比例)以及m33,它们被设置为1。另请参阅
QTransform()isIdentity()基本 矩阵 操作这是一个重载函数。
将坐标系以给定的角度
a绕指定的axis逆时针旋转,距离屏幕 1024.0,并返回矩阵的引用。请注意,如果您将
QTransform应用于在小部件坐标中定义的点,旋转方向将是顺时针的,因为y轴指向下方。角度以度为单位指定。
另请参阅
- rotate(a, axis, distanceToPlane)
- Parameters:
a – 浮点数
axis –
AxisdistanceToPlane – 浮点数
- Return type:
将坐标系按给定角度
a逆时针旋转,围绕指定的axis轴,距离屏幕distanceToPlane,并返回矩阵的引用。请注意,如果您将
QTransform应用于在小部件坐标中定义的点,旋转方向将是顺时针的,因为y轴指向下方。角度以度为单位指定。
如果
distanceToPlane为零,它将被忽略。这适用于实现正交投影,其中 z 坐标应被丢弃而不是投影。另请参阅
这是一个重载函数。
将坐标系以给定的角度
a绕指定的axis逆时针旋转,距离屏幕 1024.0,并返回矩阵的引用。请注意,如果您将
QTransform应用于在小部件坐标中定义的点,旋转方向将是顺时针的,因为y轴指向下方。角度以弧度指定。
另请参阅
- rotateRadians(a, axis, distanceToPlane)
- Parameters:
a – 浮点数
axis –
AxisdistanceToPlane – 浮点数
- Return type:
将坐标系按给定的角度
a逆时针旋转,围绕指定的axis轴,距离屏幕distanceToPlane,并返回矩阵的引用。请注意,如果您将
QTransform应用于在小部件坐标中定义的点,旋转方向将是顺时针的,因为y轴指向下方。角度以弧度为单位指定。
如果
distanceToPlane为零,它将被忽略。这适用于实现正交投影,其中 z 坐标应该被丢弃而不是投影。另请参阅
- scale(sx, sy)¶
- Parameters:
sx – 浮点数
sy – 浮点数
- Return type:
将坐标系水平缩放
sx,垂直缩放sy,并返回矩阵的引用。另请参阅
- setMatrix(m11, m12, m13, m21, m22, m23, m31, m32, m33)¶
- Parameters:
m11 – 浮点数
m12 – 浮点数
m13 – 浮点数
m21 – 浮点数
m22 – 浮点数
m23 – 浮点数
m31 – 浮点数
m32 – 浮点数
m33 – 浮点数
将矩阵元素设置为指定的值,
m11,m12,m13m21,m22,m23m31,m32和m33。请注意,此函数会替换之前的值。QTransform提供了translate()、rotate()、scale()和shear()便利函数,用于基于当前定义的坐标系操作各种矩阵元素。另请参阅
QTransform()- shear(sh, sv)¶
- Parameters:
sh – 浮点数
sv – 浮点数
- Return type:
通过
sh水平剪切和sv垂直剪切坐标系,并返回矩阵的引用。另请参阅
- static squareToQuad(square, result)
- Parameters:
square –
QPolygonF结果 –
QTransform
- Return type:
布尔
创建一个变换矩阵,
trans,它将一个单位正方形映射到一个四边形,quad。如果变换被成功构建,则返回true;如果这样的变换不存在,则返回false。- translate(dx, dy)¶
- Parameters:
dx – 浮点数
dy – 浮点数
- Return type:
将坐标系沿x轴移动
dx,沿y轴移动dy,并返回矩阵的引用。另请参阅
- transposed()¶
- Return type:
返回此矩阵的转置。
- type()¶
- Return type:
返回此矩阵的变换类型。
变换类型是捕获矩阵所有变换的最高枚举值。例如,如果矩阵同时进行缩放和剪切,类型将是
TxShear,因为TxShear的枚举值高于TxScale。了解矩阵的变换类型对优化很有用:通常你可以比处理一般情况更优化地处理特定类型。