QMatrix 類

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 , 坐標係 , 仿射變換範例 ,和 變換範例 .

成員函數文檔編製

QMatrix:: QMatrix (const QMatrix & matrix )

Constructs a matrix that is a copy of the given matrix .

QMatrix:: QMatrix ( qreal m11 , qreal m12 , qreal m21 , qreal m22 , qreal dx , qreal dy )

構造矩陣采用元素 m11 , m12 , m21 , m22 , dx and dy .

另請參閱 setMatrix ().

QMatrix:: QMatrix ()

構造恒等矩陣。

所有元素被設為 0 除瞭 m11 and m22 (specifying the scale), which are set to 1.

另請參閱 reset ().

QMatrix &QMatrix:: operator= (const QMatrix & matrix )

賦值給定 matrix 的值到此矩陣。

qreal QMatrix:: m11 () const

返迴水平比例縮放因子。

另請參閱 scale () 和 基本矩陣運算 .

qreal QMatrix:: m12 () const

返迴垂直剪切因子。

另請參閱 shear () 和 基本矩陣運算 .

qreal QMatrix:: m21 () const

返迴水平剪切因子。

另請參閱 shear () 和 基本矩陣運算 .

qreal QMatrix:: m22 () const

Returns the vertical scaling factor.

另請參閱 scale () 和 基本矩陣運算 .

qreal QMatrix:: determinant () const

返迴矩陣的行列式。

該函數在 Qt 4.6 引入。

qreal QMatrix:: dx () const

Returns the horizontal translation factor.

另請參閱 translate () 和 基本矩陣運算 .

qreal QMatrix:: dy () const

返迴垂直翻譯因子。

另請參閱 translate () 和 基本矩陣運算 .

QMatrix QMatrix:: inverted ( bool * invertible = nullptr) const

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 ().

bool QMatrix:: isIdentity () const

返迴 true if the matrix is the identity matrix, otherwise returns false .

另請參閱 reset ().

bool QMatrix:: isInvertible () const

返迴 true 若矩陣可逆,否則返迴 false .

另請參閱 inverted ().

void QMatrix:: map ( qreal x , qreal y , qreal * tx , qreal * ty ) const

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.

另請參閱 基本矩陣運算 .

void QMatrix:: map ( int x , int y , int * tx , int * ty ) const

這是重載函數。

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 QMatrix:: map (const QPoint & point ) const

這是重載函數。

創建並返迴 QPoint 副本對象為給定 point , mapped into the coordinate system defined by this matrix. Note that the transformed coordinates are rounded to the nearest integer.

QPointF QMatrix:: map (const QPointF & point ) const

這是重載函數。

創建並返迴 QPointF 副本對象為給定 point , mapped into the coordinate system defined by this matrix.

QLine QMatrix:: map (const QLine & line ) const

這是重載函數。

創建並返迴 QLine 副本對象為給定 line , mapped into the coordinate system defined by this matrix. Note that the transformed coordinates are rounded to the nearest integer.

QLineF QMatrix:: map (const QLineF & line ) const

這是重載函數。

創建並返迴 QLineF 副本對象為給定 line , mapped into the coordinate system defined by this matrix.

QPolygonF QMatrix:: map (const QPolygonF & polygon ) const

這是重載函數。

創建並返迴 QPolygonF 副本對象為給定 polygon , mapped into the coordinate system defined by this matrix.

QPolygon QMatrix:: map (const QPolygon & polygon ) const

這是重載函數。

創建並返迴 QPolygon 副本對象為給定 polygon , mapped into the coordinate system defined by this matrix. Note that the transformed coordinates are rounded to the nearest integer.

QRegion QMatrix:: map (const QRegion & region ) const

這是重載函數。

創建並返迴 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 QMatrix:: map (const QPainterPath & path ) const

這是重載函數。

創建並返迴 QPainterPath 副本對象為給定 path , mapped into the coordinate system defined by this matrix.

QRectF QMatrix:: mapRect (const QRectF & rectangle ) const

創建並返迴 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 QMatrix:: mapRect (const QRect & rectangle ) const

這是重載函數。

創建並返迴 QRect 副本對象為給定 rectangle , mapped into the coordinate system defined by this matrix. Note that the transformed coordinates are rounded to the nearest integer.

QPolygon QMatrix:: mapToPolygon (const QRect & rectangle ) const

創建並返迴 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) .

另請參閱 mapRect () 和 基本矩陣運算 .

void QMatrix:: reset ()

將矩陣重置為恒等矩陣,即,所有元素被設為 0,除瞭 m11 and m22 (specifying the scale) which are set to 1.

另請參閱 QMatrix (), isIdentity (),和 基本矩陣運算 .

QMatrix &QMatrix:: rotate ( qreal degrees )

Rotates the coordinate system the given degrees counterclockwise.

注意,若應用 QMatrix 到由 Widget 坐標定義的點,鏇轉方嚮將是順時針,因為 Y 軸指嚮嚮下。

Returns a reference to the matrix.

另請參閱 setMatrix ().

QMatrix &QMatrix:: scale ( qreal sx , qreal sy )

比例縮放坐標係按 sx 水平和 sy 垂直,並返迴矩陣引用。

另請參閱 setMatrix ().

void QMatrix:: setMatrix ( qreal m11 , qreal m12 , qreal m21 , qreal m22 , qreal dx , qreal dy )

將矩陣元素設為指定值, 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 ().

QMatrix &QMatrix:: shear ( qreal sh , qreal sv )

剪切坐標係按 sh 水平和 sv 垂直,並返迴矩陣引用。

另請參閱 setMatrix ().

QMatrix &QMatrix:: translate ( qreal dx , qreal dy )

移動坐標係 dx 沿 X 軸和 dy 沿 Y 軸,並返迴矩陣引用。

另請參閱 setMatrix ().

QVariant QMatrix:: operator QVariant () const

Returns the matrix as a QVariant .

該函數在 Qt 4.2 引入。

bool QMatrix:: operator!= (const QMatrix & matrix ) const

返迴 true if this matrix is not equal to the given matrix ,否則返迴 false .

QMatrix QMatrix:: operator* (const QMatrix & matrix ) const

Returns the result of multiplying this matrix by the given matrix .

Note that matrix multiplication is not commutative, i.e. a*b != b*a.

QMatrix &QMatrix:: operator*= (const QMatrix & matrix )

這是重載函數。

Returns the result of multiplying this matrix by the given matrix .

bool QMatrix:: operator== (const QMatrix & matrix ) const

返迴 true 若此矩陣等於給定 matrix ,否則返迴 false .

相關非成員

bool qFuzzyCompare (const QMatrix & m1 , const QMatrix & m2 )

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 引入。

uint qHash (const QMatrix & key , uint seed = 0)

返迴哈希值為 key ,使用 seed 做計算種子。

該函數在 Qt 5.6 引入。

QPoint operator* (const QPoint & point , const QMatrix & matrix )

這如同 matrix .map( point ).

另請參閱 QMatrix::map ().

QPointF operator* (const QPointF & point , const QMatrix & matrix )

如同 matrix .map( point ).

另請參閱 QMatrix::map ().

QLineF operator* (const QLineF & line , const QMatrix & matrix )

這如同 matrix .map( line ).

另請參閱 QMatrix::map ().

QLine operator* (const QLine & line , const QMatrix & matrix )

這如同 matrix .map( line ).

另請參閱 QMatrix::map ().

QPolygon operator* (const QPolygon & polygon , const QMatrix & matrix )

這如同 matrix .map( polygon ).

另請參閱 QMatrix::map ().

QPolygonF operator* (const QPolygonF & polygon , const QMatrix & matrix )

這如同 matrix .map( polygon ).

另請參閱 QMatrix::map ().

QRegion operator* (const QRegion & region , const QMatrix & matrix )

這如同 matrix .map( region ).

另請參閱 QMatrix::map ().

QPainterPath operator* (const QPainterPath & path , const QMatrix & matrix )

這如同 matrix .map( path ).

另請參閱 QMatrix::map ().

QDataStream & operator<< ( QDataStream & stream , const QMatrix & matrix )

寫入給定 matrix 到給定 stream 並返迴流引用。

另請參閱 序列化 Qt 數據類型 .

QDataStream & operator>> ( QDataStream & stream , QMatrix & matrix )

讀取給定 matrix 從給定 stream 並返迴流引用。

另請參閱 序列化 Qt 數據類型 .