QMatrix 類指定坐標係的 2D 變換。 更多...
| 頭: | #include <QMatrix> |
| qmake: | QT += gui |
該類已過時。 提供它是為使舊源代碼能繼續工作。強烈建議不要在新代碼中使用它。
| QMatrix (const QMatrix & matrix ) | |
| QMatrix (qreal m11 , qreal m12 , qreal m21 , qreal m22 , qreal dx , qreal dy ) | |
| QMatrix () | |
| QMatrix & | operator= (const QMatrix & matrix ) |
| qreal | m11 () const |
| qreal | m12 () const |
| qreal | m21 () const |
| qreal | m22 () const |
| qreal | determinant () const |
| qreal | dx () const |
| qreal | dy () const |
| QMatrix | inverted (bool * invertible = nullptr) const |
| bool | isIdentity () const |
| bool | isInvertible () const |
| void | map (qreal x , qreal y , qreal * tx , qreal * ty ) const |
| void | map (int x , int y , int * tx , int * ty ) const |
| QPoint | map (const QPoint & point ) const |
| QPointF | map (const QPointF & point ) const |
| QLine | map (const QLine & line ) 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 |
| QRectF | mapRect (const QRectF & rectangle ) const |
| QRect | mapRect (const QRect & rectangle ) const |
| QPolygon | mapToPolygon (const QRect & rectangle ) const |
| void | reset () |
| QMatrix & | rotate (qreal degrees ) |
| QMatrix & | scale (qreal sx , qreal sy ) |
| void | setMatrix (qreal m11 , qreal m12 , qreal m21 , qreal m22 , qreal dx , qreal dy ) |
| QMatrix & | shear (qreal sh , qreal sv ) |
| QMatrix & | translate (qreal dx , qreal dy ) |
| QVariant | operator QVariant () const |
| bool | operator!= (const QMatrix & matrix ) const |
| QMatrix | operator* (const QMatrix & matrix ) const |
| QMatrix & | operator*= (const QMatrix & matrix ) |
| bool | operator== (const QMatrix & matrix ) const |
| bool | qFuzzyCompare (const QMatrix & m1 , const QMatrix & m2 ) |
| uint | qHash (const QMatrix & key , uint seed = 0) |
| QPoint | operator* (const QPoint & point , const QMatrix & matrix ) |
| QPointF | operator* (const QPointF & point , const QMatrix & matrix ) |
| QLineF | operator* (const QLineF & line , const QMatrix & matrix ) |
| QLine | operator* (const QLine & line , const QMatrix & matrix ) |
| QPolygon | operator* (const QPolygon & polygon , const QMatrix & matrix ) |
| QPolygonF | operator* (const QPolygonF & polygon , const QMatrix & matrix ) |
| QRegion | operator* (const QRegion & region , const QMatrix & matrix ) |
| QPainterPath | operator* (const QPainterPath & path , const QMatrix & matrix ) |
| QDataStream & | operator<< (QDataStream & stream , const QMatrix & matrix ) |
| QDataStream & | operator>> (QDataStream & stream , QMatrix & matrix ) |
矩陣指定如何平移、比例縮放、剪切或鏇轉坐標係,且通常在渲染圖形時使用。QMatrix 相比 QTransform ,不允許透視圖變換。 QTransform 是 Qt 推薦的變換類。
QMatrix 對象的構建可以使用 setMatrix (), scale (), rotate (), translate () 和 shear () 函數。另外,可以構建它通過應用 基本矩陣運算 。矩陣也可以在構造時定義,且可以把它重置為恒等矩陣 (默認) 使用 reset () 函數。
QMatrix 類支持圖形原語的映射:可以將給定點、綫、多邊形、區域或描繪器路徑,映射到坐標係定義通過 this 矩陣使用 map () 函數。若是矩形,變換其坐標可以使用 mapRect () 函數。還可以將矩形變換成 polygon (映射到坐標係定義通過 this 矩陣),使用 mapToPolygon () 函數。
QMatrix 提供
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). In addition, QMatrix provides the
determinant
() function returning the matrix's determinant.
Finally, the QMatrix class supports matrix multiplication, 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 QMatrix. For example:
|
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, "QMatrix"); } |
Although these functions are very convenient, it can be more efficient to build a QMatrix and call QPainter::setMatrix () 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); QMatrix matrix; matrix.translate(50, 50); matrix.rotate(45); matrix.scale(0.5, 1.0); painter.setMatrix(matrix); painter.setFont(QFont("Helvetica", 24)); painter.setPen(QPen(Qt::black, 1)); painter.drawText(20, 10, "QMatrix"); } |
QMatrix 對象包含 3 x 3 矩陣。
dx
and
dy
元素指定水平和垂直平移。
m11
and
m22
elements specify horizontal and vertical scaling. And finally, the
m21
and
m12
elements specify horizontal and vertical
shearing
.
QMatrix 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
點 (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 (), m21 (), m22 (), 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
and
m22
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 carefully setting both the shearing 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); QMatrix translationMatrix(1, 0, 0, 1, 50.0, 50.0); QMatrix rotationMatrix(cosa, sina, -sina, cosa, 0, 0); QMatrix scalingMatrix(0.5, 0, 0, 1.0, 0, 0); QMatrix matrix; matrix = scalingMatrix * rotationMatrix * translationMatrix; QPainter painter(this); painter.setPen(QPen(Qt::blue, 1, Qt::DashLine)); painter.drawRect(0, 0, 100, 100); painter.setMatrix(matrix); painter.setFont(QFont("Helvetica", 24)); painter.setPen(QPen(Qt::black, 1)); painter.drawText(20, 10, "QMatrix"); } |
另請參閱 QPainter , QTransform , 坐標係 , 仿射變換範例 ,和 變換範例 .
Constructs a matrix that is a copy of the given matrix .
構造矩陣采用元素 m11 , m12 , m21 , m22 , dx and dy .
另請參閱 setMatrix ().
構造恒等矩陣。
所有元素被設為 0 除瞭
m11
and
m22
(specifying the scale), which are set to 1.
另請參閱 reset ().
賦值給定 matrix 的值到此矩陣。
返迴水平比例縮放因子。
返迴垂直剪切因子。
返迴水平剪切因子。
Returns the vertical scaling factor.
返迴矩陣的行列式。
該函數在 Qt 4.6 引入。
Returns the horizontal translation factor.
返迴垂直翻譯因子。
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 is the identity matrix, otherwise returns
false
.
另請參閱 reset ().
返迴
true
若矩陣可逆,否則返迴
false
.
另請參閱 inverted ().
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
The point (x, y) is the original point, and (x', y') is the transformed point.
另請參閱 基本矩陣運算 .
這是重載函數。
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.
這是重載函數。
創建並返迴 QPointF 副本對象為給定 point , 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.
這是重載函數。
創建並返迴 QLineF 副本對象為給定 line , mapped into the coordinate system defined by this matrix.
這是重載函數。
創建並返迴 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.
創建並返迴 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 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
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)
.
將矩陣重置為恒等矩陣,即,所有元素被設為 0,除瞭
m11
and
m22
(specifying the scale) which are set to 1.
另請參閱 QMatrix (), isIdentity (),和 基本矩陣運算 .
Rotates the coordinate system the given degrees counterclockwise.
注意,若應用 QMatrix 到由 Widget 坐標定義的點,鏇轉方嚮將是順時針,因為 Y 軸指嚮嚮下。
Returns a reference to the matrix.
另請參閱 setMatrix ().
比例縮放坐標係按 sx 水平和 sy 垂直,並返迴矩陣引用。
另請參閱 setMatrix ().
將矩陣元素設為指定值, m11 , m12 , m21 , m22 , dx and dy .
Note that this function replaces the previous values. QMatrix provide the translate (), rotate (), scale () 和 shear () convenience functions to manipulate the various matrix elements based on the currently defined coordinate system.
另請參閱 QMatrix ().
剪切坐標係按 sh 水平和 sv 垂直,並返迴矩陣引用。
另請參閱 setMatrix ().
移動坐標係 dx 沿 X 軸和 dy 沿 Y 軸,並返迴矩陣引用。
另請參閱 setMatrix ().
Returns the matrix as a QVariant .
該函數在 Qt 4.2 引入。
返迴
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 .
返迴
true
若此矩陣等於給定
matrix
,否則返迴
false
.
The qFuzzyCompare function is for comparing two matrices using a fuzziness factor.
返迴
true
if
m1
and
m2
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 ).
另請參閱 QMatrix::map ().
如同 matrix .map( point ).
另請參閱 QMatrix::map ().
這如同 matrix .map( line ).
另請參閱 QMatrix::map ().
這如同 matrix .map( line ).
另請參閱 QMatrix::map ().
這如同 matrix .map( polygon ).
另請參閱 QMatrix::map ().
這如同 matrix .map( polygon ).
另請參閱 QMatrix::map ().
這如同 matrix .map( region ).
另請參閱 QMatrix::map ().
這如同 matrix .map( path ).
另請參閱 QMatrix::map ().
寫入給定 matrix 到給定 stream 並返迴流引用。
另請參閱 序列化 Qt 數據類型 .
讀取給定 matrix 從給定 stream 並返迴流引用。
另請參閱 序列化 Qt 數據類型 .