The QTransform class specifies 2D transformations of a coordinate system. 更多...
| 頭: | #include <QTransform> |
| qmake: | QT += gui |
| Since: | Qt 4.3 |
| enum | TransformationType { TxNone, TxTranslate, TxScale, TxRotate, TxShear, TxProject } |
| QTransform () | |
| QTransform (qreal m11 , qreal m12 , qreal m13 , qreal m21 , qreal m22 , qreal m23 , qreal m31 , qreal m32 , qreal m33 = 1.0) | |
| QTransform (qreal m11 , qreal m12 , qreal m21 , qreal m22 , qreal dx , qreal dy ) | |
| QTransform (const QMatrix & matrix ) | |
| QTransform (QTransform && other ) | |
| QTransform (const QTransform & other ) | |
| qreal | m11 () const |
| qreal | m12 () const |
| qreal | m13 () const |
| qreal | m21 () const |
| qreal | m22 () const |
| qreal | m23 () const |
| qreal | m31 () const |
| qreal | m32 () const |
| qreal | m33 () const |
| QTransform | adjoint () const |
| qreal | determinant () const |
| qreal | dx () const |
| qreal | dy () const |
| QTransform | inverted (bool * invertible = nullptr) const |
| bool | isAffine () const |
| bool | isIdentity () const |
| bool | isInvertible () const |
| bool | isRotating () const |
| bool | isScaling () const |
| bool | isTranslating () const |
| void | map (qreal x , qreal y , qreal * tx , qreal * ty ) const |
| QPointF | map (const QPointF & p ) const |
| QLine | map (const QLine & l ) const |
| QLineF | map (const QLineF & line ) const |
| QPolygonF | map (const QPolygonF & polygon ) const |
| QPolygon | map (const QPolygon & polygon ) const |
| QRegion | map (const QRegion & region ) const |
| QPainterPath | map (const QPainterPath & path ) const |
| void | map (int x , int y , int * tx , int * ty ) const |
| QPoint | map (const QPoint & point ) const |
| QRectF | mapRect (const QRectF & rectangle ) const |
| QRect | mapRect (const QRect & rectangle ) const |
| QPolygon | mapToPolygon (const QRect & rectangle ) const |
| void | reset () |
| QTransform & | rotate (qreal angle , Qt::Axis axis = Qt::ZAxis) |
| QTransform & | rotateRadians (qreal angle , Qt::Axis axis = Qt::ZAxis) |
| QTransform & | scale (qreal sx , qreal sy ) |
| void | setMatrix (qreal m11 , qreal m12 , qreal m13 , qreal m21 , qreal m22 , qreal m23 , qreal m31 , qreal m32 , qreal m33 ) |
| QTransform & | shear (qreal sh , qreal sv ) |
| const QMatrix & | toAffine () const |
| QTransform & | translate (qreal dx , qreal dy ) |
| QTransform | transposed () const |
| QTransform::TransformationType | type () const |
| QVariant | operator QVariant () const |
| bool | operator!= (const QTransform & matrix ) const |
| QTransform | operator* (const QTransform & matrix ) const |
| QTransform & | operator*= (const QTransform & matrix ) |
| QTransform & | operator*= (qreal scalar ) |
| QTransform & | operator+= (qreal scalar ) |
| QTransform & | operator-= (qreal scalar ) |
| QTransform & | operator/= (qreal scalar ) |
| QTransform & | operator= (QTransform && other ) |
| QTransform & | operator= (const QTransform & matrix ) |
| bool | operator== (const QTransform & matrix ) const |
| QTransform | fromScale (qreal sx , qreal sy ) |
| QTransform | fromTranslate (qreal dx , qreal dy ) |
| bool | quadToQuad (const QPolygonF & one , const QPolygonF & two , QTransform & trans ) |
| bool | quadToSquare (const QPolygonF & quad , QTransform & trans ) |
| bool | squareToQuad (const QPolygonF & quad , QTransform & trans ) |
| bool | qFuzzyCompare (const QTransform & t1 , const QTransform & t2 ) |
| uint | qHash (const QTransform & key , uint seed = 0) |
| QPoint | operator* (const QPoint & point , const QTransform & matrix ) |
| QPointF | operator* (const QPointF & point , const QTransform & matrix ) |
| QLineF | operator* (const QLineF & line , const QTransform & matrix ) |
| QLine | operator* (const QLine & line , const QTransform & matrix ) |
| QPolygonF | operator* (const QPolygonF & polygon , const QTransform & matrix ) |
| QPolygon | operator* (const QPolygon & polygon , const QTransform & matrix ) |
| QRegion | operator* (const QRegion & region , const QTransform & matrix ) |
| QPainterPath | operator* (const QPainterPath & path , const QTransform & matrix ) |
| QDataStream & | operator<< (QDataStream & stream , const QTransform & matrix ) |
| QDataStream & | operator>> (QDataStream & stream , QTransform & matrix ) |
The QTransform class specifies 2D transformations of a coordinate system.
變換指定如何平移、比例縮放、剪切、鏇轉或投影坐標係,且通常在渲染圖形時使用。
QTransform differs from QMatrix in that it is a true 3x3 matrix, allowing perspective transformations. QTransform 's toAffine () method allows casting QTransform to QMatrix. If a perspective transformation has been specified on the matrix, then the conversion will cause loss of data.
QTransform 是 Qt 推薦的變換類。
A QTransform object can be built using the setMatrix (), scale (), rotate (), translate () 和 shear () 函數。另外,可以構建它通過應用 基本矩陣運算 。矩陣也可以在構造時定義,且可以把它重置為恒等矩陣 (默認) 使用 reset () 函數。
The QTransform class supports mapping of graphic primitives: A given point, line, polygon, region, or painter path can be mapped to the coordinate system defined by this 矩陣使用 map () 函數。若是矩形,變換其坐標可以使用 mapRect () 函數。還可以將矩形變換成 polygon (映射到坐標係定義通過 this 矩陣),使用 mapToPolygon () 函數。
QTransform
提供
isIdentity
() 函數其返迴
true
若矩陣是恒等矩陣,和
isInvertible
() 函數其返迴
true
if the matrix is non-singular (i.e. AB = BA = I). The
inverted
() function returns an inverted copy of
this
matrix if it is invertible (otherwise it returns the identity matrix), and
adjoint
() returns the matrix's classical adjoint. In addition,
QTransform
提供
determinant
() function which returns the matrix's determinant.
Finally, the QTransform class supports matrix multiplication, addition and subtraction, and objects of the class can be streamed as well as compared.
When rendering graphics, the matrix defines the transformations but the actual transformation is performed by the drawing routines in QPainter .
默認情況下, QPainter operates on the associated device's own coordinate system. The standard coordinate system of a QPaintDevice has its origin located at the top-left position. The x values increase to the right; y values increase downward. For a complete description, see the 坐標係 文檔編製。
QPainter has functions to translate, scale, shear and rotate the coordinate system without using a QTransform 。例如:
|
void SimpleTransformation::paintEvent(QPaintEvent *) { QPainter painter(this); 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"); } |
Although these functions are very convenient, it can be more efficient to build a QTransform 和調用 QPainter::setTransform () if you want to perform more than a single transform operation. For example:
|
void CombinedTransformation::paintEvent(QPaintEvent *) { QPainter painter(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, 1.0); painter.setTransform(transform); painter.setFont(QFont("Helvetica", 24)); painter.setPen(QPen(Qt::black, 1)); painter.drawText(20, 10, "QTransform"); } |
A
QTransform
object contains a 3 x 3 matrix. The
m31
(
dx
) 和
m32
(
dy
) 元素指定水平和垂直平移。
m11
and
m22
元素指定水平和垂直比例縮放。
m21
and
m12
elements specify horizontal and vertical
shearing
. And finally, the
m13
and
m23
elements specify horizontal and vertical projection, with
m33
as an additional projection factor.
QTransform transforms a point in the plane to another point using the following formulas:
x' = m11*x + m21*y + dx y' = m22*y + m12*x + dy if (is not affine) { w' = m13*x + m23*y + m33 x' /= w' y' /= w' }
點 (x, y) 是原點,和 (x', y') is the transformed point. (x', y') can be transformed back to (x, y) by performing the same operation on the inverted () matrix.
The various matrix elements can be set when constructing the matrix, or by using the setMatrix () function later on. They can also be manipulated using the translate (), rotate (), scale () 和 shear () convenience functions. The currently set values can be retrieved using the m11 (), m12 (), m13 (), m21 (), m22 (), m23 (), m31 (), m32 (), m33 (), dx () 和 dy () 函數。
Translation is the simplest transformation. Setting
dx
and
dy
will move the coordinate system
dx
units along the X axis and
dy
units along the Y axis. Scaling can be done by setting
m11
and
m22
. For example, setting
m11
to 2 and
m22
to 1.5 will double the height and increase the width by 50%. The identity matrix has
m11
,
m22
,和
m33
set to 1 (all others are set to 0) mapping a point to itself. Shearing is controlled by
m12
and
m21
. Setting these elements to values different from zero will twist the coordinate system. Rotation is achieved by setting both the shearing factors and the scaling factors. Perspective transformation is achieved by setting both the projection factors and the scaling factors.
Here's the combined transformations example using basic matrix operations:
|
void BasicOperations::paintEvent(QPaintEvent *) { double pi = 3.14; double a = pi/180 * 45.0; double sina = sin(a); double cosa = cos(a); QTransform translationTransform(1, 0, 0, 1, 50.0, 50.0); QTransform rotationTransform(cosa, sina, -sina, cosa, 0, 0); QTransform scalingTransform(0.5, 0, 0, 1.0, 0, 0); QTransform transform; transform = scalingTransform * rotationTransform * translationTransform; QPainter painter(this); 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"); } |
另請參閱 QPainter , 坐標係 , 仿射變換範例 ,和 變換範例 .
| 常量 | 值 |
|---|---|
QTransform::TxNone
|
0x00
|
QTransform::TxTranslate
|
0x01
|
QTransform::TxScale
|
0x02
|
QTransform::TxRotate
|
0x04
|
QTransform::TxShear
|
0x08
|
QTransform::TxProject
|
0x10
|
構造恒等矩陣。
所有元素被設為 0 除瞭
m11
and
m22
(指定比例) 和
m33
被設為 1。
另請參閱 reset ().
構造矩陣采用元素 m11 , m12 , m13 , m21 , m22 , m23 , m31 , m32 , m33 .
另請參閱 setMatrix ().
構造矩陣采用元素 m11 , m12 , m21 , m22 , dx and dy .
另請參閱 setMatrix ().
Constructs a matrix that is a copy of the given
matrix
。注意,
m13
,
m23
,和
m33
elements are set to 0, 0, and 1 respectively.
移動拷貝構造函數。
Default constructs an instance of QTransform.
返迴水平比例縮放因子。
返迴垂直剪切因子。
返迴水平投影因子。
返迴水平剪切因子。
Returns the vertical scaling factor.
Returns the vertical projection factor.
Returns the horizontal translation factor.
另請參閱 dx (), translate (),和 基本矩陣運算 .
返迴垂直翻譯因子。
另請參閱 dy (), translate (),和 基本矩陣運算 .
Returns the division factor.
Returns the adjoint of this matrix.
返迴矩陣的行列式。
Returns the horizontal translation factor.
另請參閱 m31 (), translate (),和 基本矩陣運算 .
返迴垂直翻譯因子。
[static]
QTransform
QTransform::
fromScale
(
qreal
sx
,
qreal
sy
)
Creates a matrix which corresponds to a scaling of sx 水平和 sy vertically. This is the same as QTransform ().scale(sx, sy) but slightly faster.
該函數在 Qt 4.5 引入。
[static]
QTransform
QTransform::
fromTranslate
(
qreal
dx
,
qreal
dy
)
Creates a matrix which corresponds to a translation of dx 沿 X 軸和 dy along the y axis. This is the same as QTransform ().translate(dx, dy) but slightly faster.
該函數在 Qt 4.5 引入。
Returns an inverted copy of this matrix.
If the matrix is singular (not invertible), the returned matrix is the identity matrix. If invertible is valid (i.e. not 0), its value is set to true if the matrix is invertible, otherwise it is set to false.
另請參閱 isInvertible ().
返迴
true
if the matrix represent an affine transformation, otherwise returns
false
.
返迴
true
if the matrix is the identity matrix, otherwise returns
false
.
另請參閱 reset ().
返迴
true
若矩陣可逆,否則返迴
false
.
另請參閱 inverted ().
返迴
true
若矩陣錶示某種鏇轉變換,否則返迴
false
.
注意: A rotation transformation of 180 degrees and/or 360 degrees is treated as a scaling transformation.
另請參閱 reset ().
返迴
true
若矩陣錶示比例縮放變換,否則返迴
false
.
另請參閱 reset ().
返迴
true
若矩陣錶示平移變換,否則返迴
false
.
另請參閱 reset ().
Maps the given coordinates x and y into the coordinate system defined by this matrix. The resulting values are put in * tx 和 * ty ,分彆。
The coordinates are transformed using the following formulas:
x' = m11*x + m21*y + dx y' = m22*y + m12*x + dy if (is not affine) { w' = m13*x + m23*y + m33 x' /= w' y' /= w' }
The point (x, y) is the original point, and (x', y') is the transformed point.
另請參閱 基本矩陣運算 .
這是重載函數。
創建並返迴 QPointF object that is a copy of the given point, p , mapped into the coordinate system defined by this matrix.
這是重載函數。
創建並返迴 QLineF object that is a copy of the given line, l , mapped into the coordinate system defined by this matrix.
這是重載函數。
創建並返迴 QLine 副本對象為給定 line , mapped into the coordinate system defined by this matrix. Note that the transformed coordinates are rounded to the nearest integer.
這是重載函數。
創建並返迴 QPolygonF 副本對象為給定 polygon , mapped into the coordinate system defined by this matrix.
這是重載函數。
創建並返迴 QPolygon 副本對象為給定 polygon , mapped into the coordinate system defined by this matrix. Note that the transformed coordinates are rounded to the nearest integer.
這是重載函數。
創建並返迴 QRegion 副本對象為給定 region , mapped into the coordinate system defined by this matrix.
Calling this method can be rather expensive if rotations or shearing are used.
這是重載函數。
創建並返迴 QPainterPath 副本對象為給定 path , mapped into the coordinate system defined by this matrix.
這是重載函數。
Maps the given coordinates x and y into the coordinate system defined by this matrix. The resulting values are put in * tx 和 * ty , respectively. Note that the transformed coordinates are rounded to the nearest integer.
這是重載函數。
創建並返迴 QPoint 副本對象為給定 point , mapped into the coordinate system defined by this matrix. Note that the transformed coordinates are rounded to the nearest integer.
創建並返迴 QRectF 副本對象為給定 rectangle , mapped into the coordinate system defined by this matrix.
The rectangle's coordinates are transformed using the following formulas:
x' = m11*x + m21*y + dx y' = m22*y + m12*x + dy if (is not affine) { w' = m13*x + m23*y + m33 x' /= w' y' /= w' }
If rotation or shearing has been specified, this function returns the bounding rectangle. To retrieve the exact region the given rectangle maps to, use the mapToPolygon () 函數代替。
另請參閱 mapToPolygon () 和 基本矩陣運算 .
這是重載函數。
創建並返迴 QRect 副本對象為給定 rectangle , mapped into the coordinate system defined by this matrix. Note that the transformed coordinates are rounded to the nearest integer.
創建並返迴 QPolygon 錶示的給定 rectangle , mapped into the coordinate system defined by this matrix.
The rectangle's coordinates are transformed using the following formulas:
x' = m11*x + m21*y + dx y' = m22*y + m12*x + dy if (is not affine) { w' = m13*x + m23*y + m33 x' /= w' y' /= w' }
Polygons and rectangles behave slightly differently when transformed (due to integer rounding), so
matrix.map(QPolygon(rectangle))
is not always the same as
matrix.mapToPolygon(rectangle)
.
[static]
bool
QTransform::
quadToQuad
(const
QPolygonF
&
one
, const
QPolygonF
&
two
,
QTransform
&
trans
)
創建變換矩陣
trans
,映射 4 邊多邊形
one
,到另一 4 邊多邊形
two
。返迴
true
若變換是可能的;否則返迴 false。
這是方便方法組閤 quadToSquare () 和 squareToQuad () methods. It allows the input quad to be transformed into any other quad.
另請參閱 squareToQuad () 和 quadToSquare ().
[static]
bool
QTransform::
quadToSquare
(const
QPolygonF
&
quad
,
QTransform
&
trans
)
創建變換矩陣
trans
,映射 4 邊多邊形
quad
,到單位正方形。返迴
true
if the transformation is constructed or false if such a transformation does not exist.
另請參閱 squareToQuad () 和 quadToQuad ().
將矩陣重置為恒等矩陣,即,所有元素被設為 0,除瞭
m11
and
m22
(指定比例) 和
m33
被設為 1。
另請參閱 QTransform (), isIdentity (),和 基本矩陣運算 .
逆時針鏇轉坐標係按給定 angle 關於指定 axis 並返迴矩陣引用。
注意,若應用 QTransform 到由 Widget 坐標定義的點,鏇轉方嚮將是順時針,因為 Y 軸指嚮嚮下。
角度的指定是以度為單位。
另請參閱 setMatrix ().
逆時針鏇轉坐標係按給定 angle 關於指定 axis 並返迴矩陣引用。
注意,若應用 QTransform 到由 Widget 坐標定義的點,鏇轉方嚮將是順時針,因為 Y 軸指嚮嚮下。
角度的指定是以弧度為單位。
另請參閱 setMatrix ().
比例縮放坐標係按 sx 水平和 sy 垂直,並返迴矩陣引用。
另請參閱 setMatrix ().
將矩陣元素設為指定值, m11 , m12 , m13 m21 , m22 , m23 m31 , m32 and m33 。注意,此函數替換先前值。 QTransform 提供 translate (), rotate (), scale () 和 shear () convenience functions to manipulate the various matrix elements based on the currently defined coordinate system.
另請參閱 QTransform ().
剪切坐標係按 sh 水平和 sv 垂直,並返迴矩陣引用。
另請參閱 setMatrix ().
[static]
bool
QTransform::
squareToQuad
(const
QPolygonF
&
quad
,
QTransform
&
trans
)
創建變換矩陣
trans
, that maps a unit square to a four-sided polygon,
quad
。返迴
true
if the transformation is constructed or false if such a transformation does not exist.
另請參閱 quadToSquare () 和 quadToQuad ().
返迴 QTransform as an affine matrix.
警告: If a perspective transformation has been specified, then the conversion will cause loss of data.
移動坐標係 dx 沿 X 軸和 dy 沿 Y 軸,並返迴矩陣引用。
另請參閱 setMatrix ().
返迴此矩陣的轉置。
返迴此矩陣的變換類型。
The transformation type is the highest enumeration value capturing all of the matrix's transformations. For example, if the matrix both scales and shears, the type would be
TxShear
,因為
TxShear
has a higher enumeration value than
TxScale
.
Knowing the transformation type of a matrix is useful for optimization: you can often handle specific types more optimally than handling the generic case.
返迴變換如 QVariant .
返迴
true
if this matrix is not equal to the given
matrix
,否則返迴
false
.
Returns the result of multiplying this matrix by the given matrix .
Note that matrix multiplication is not commutative, i.e. a*b != b*a.
這是重載函數。
Returns the result of multiplying this matrix by the given matrix .
這是重載函數。
Returns the result of performing an element-wise multiplication of this matrix with the given scalar .
這是重載函數。
Returns the matrix obtained by adding the given scalar to each element of this matrix.
這是重載函數。
Returns the matrix obtained by subtracting the given scalar from each element of this matrix.
這是重載函數。
Returns the result of performing an element-wise division of this matrix by the given scalar .
移動賦值運算符。
賦值給定 matrix 的值到此矩陣。
返迴
true
若此矩陣等於給定
matrix
,否則返迴
false
.
返迴
true
if
t1
and
t2
are equal, allowing for a small fuzziness factor for floating-point comparisons; false otherwise.
該函數在 Qt 4.6 引入。
返迴哈希值為 key ,使用 seed 做計算種子。
該函數在 Qt 5.6 引入。
這如同 matrix .map( point ).
另請參閱 QTransform::map ().
如同 matrix .map( point ).
另請參閱 QTransform::map ().
這如同 matrix .map( line ).
另請參閱 QTransform::map ().
這如同 matrix .map( line ).
另請參閱 QTransform::map ().
這如同 matrix .map( polygon ).
該函數在 Qt 4.3 引入。
另請參閱 QTransform::map ().
這如同 matrix .map( polygon ).
另請參閱 QTransform::map ().
這如同 matrix .map( region ).
另請參閱 QTransform::map ().
這如同 matrix .map( path ).
該函數在 Qt 4.3 引入。
另請參閱 QTransform::map ().
寫入給定 matrix 到給定 stream 並返迴流引用。
該函數在 Qt 4.3 引入。
另請參閱 序列化 Qt 數據類型 .
讀取給定 matrix 從給定 stream 並返迴流引用。
該函數在 Qt 4.3 引入。
另請參閱 序列化 Qt 數據類型 .