6#include <QtGui/qtguiglobal.h>
7#include <QtGui/qpolygon.h>
8#include <QtGui/qregion.h>
9#include <QtGui/qwindowdefs.h>
10#include <QtCore/qline.h>
11#include <QtCore/qpoint.h>
12#include <QtCore/qrect.h>
22 enum TransformationType {
31 inline explicit QTransform(Qt::Initialization) {}
33 : m_matrix{ {1, 0, 0}, {0, 1, 0}, {0, 0, 1} }
36 QTransform(qreal h11, qreal h12, qreal h13,
37 qreal h21, qreal h22, qreal h23,
38 qreal h31, qreal h32, qreal h33)
39 : m_matrix{ {h11, h12, h13}, {h21, h22, h23}, {h31, h32, h33} }
41 , m_dirty(TxProject) {}
42 QTransform(qreal h11, qreal h12, qreal h21,
43 qreal h22, qreal dx, qreal dy)
44 : m_matrix{ {h11, h12, 0}, {h21, h22, 0}, {dx, dy, 1} }
48 QTransform &operator=(QTransform &&other)
noexcept =
default;
49 QTransform &operator=(
const QTransform &)
noexcept =
default;
50 QTransform(QTransform &&other)
noexcept =
default;
51 QTransform(
const QTransform &other)
noexcept =
default;
53 bool isAffine()
const;
54 bool isIdentity()
const;
55 bool isInvertible()
const;
56 bool isScaling()
const;
57 bool isRotating()
const;
58 bool isTranslating()
const;
60 TransformationType type()
const;
62 inline qreal determinant()
const;
76 void setMatrix(qreal m11, qreal m12, qreal m13,
77 qreal m21, qreal m22, qreal m23,
78 qreal m31, qreal m32, qreal m33);
80 [[nodiscard]] QTransform inverted(
bool *invertible =
nullptr)
const;
81 [[nodiscard]] QTransform adjoint()
const;
82 [[nodiscard]] QTransform transposed()
const;
84 QTransform &translate(qreal dx, qreal dy);
85 QTransform &scale(qreal sx, qreal sy);
86 QTransform &shear(qreal sh, qreal sv);
87#if QT_VERSION < QT_VERSION_CHECK(7
, 0
, 0
)
88 QTransform &rotate(qreal a, Qt::Axis axis, qreal distanceToPlane);
90 QTransform &rotate(qreal a, Qt::Axis axis = Qt::ZAxis);
91 QTransform &rotateRadians(qreal a, Qt::Axis axis, qreal distanceToPlane);
93 QTransform &rotateRadians(qreal a, Qt::Axis axis = Qt::ZAxis);
95 QTransform &rotate(qreal a, Qt::Axis axis = Qt::ZAxis, qreal distanceToPlane = 1024.0f);
96 QTransform &rotateRadians(qreal a, Qt::Axis axis = Qt::ZAxis, qreal distanceToPlane = 1024.0f);
99 static bool squareToQuad(
const QPolygonF &square, QTransform &result);
100 static bool quadToSquare(
const QPolygonF &quad, QTransform &result);
101 static bool quadToQuad(
const QPolygonF &one,
102 const QPolygonF &two,
105 bool operator==(
const QTransform &)
const;
106 bool operator!=(
const QTransform &)
const;
108 QTransform &operator*=(
const QTransform &);
109 QTransform operator*(
const QTransform &o)
const;
111 operator QVariant()
const;
114 QPoint map(
const QPoint &p)
const;
115 QPointF map(
const QPointF &p)
const;
116 QLine map(
const QLine &l)
const;
117 QLineF map(
const QLineF &l)
const;
118 QPolygonF map(
const QPolygonF &a)
const;
119 QPolygon map(
const QPolygon &a)
const;
120 QRegion map(
const QRegion &r)
const;
121 QPainterPath map(
const QPainterPath &p)
const;
122 QPolygon mapToPolygon(
const QRect &r)
const;
123 QRect mapRect(
const QRect &)
const;
124 QRectF mapRect(
const QRectF &)
const;
125 void map(
int x,
int y,
int *tx,
int *ty)
const;
126 void map(qreal x, qreal y, qreal *tx, qreal *ty)
const;
128 QTransform &operator*=(qreal div);
129 QTransform &operator/=(qreal div);
130 QTransform &operator+=(qreal div);
131 QTransform &operator-=(qreal div);
133 static QTransform fromTranslate(qreal dx, qreal dy);
134 static QTransform fromScale(qreal dx, qreal dy);
138 qreal (& m_matrix)[3][3];
142 auto asAffineMatrix() {
return Affine { m_matrix }; }
143 friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &s, Affine &m);
144 friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &s,
const Affine &m);
147 inline TransformationType inline_type()
const;
148 void do_map(qreal x, qreal y, qreal &nx, qreal &ny)
const;
149 qreal m_matrix[3][3];
151 mutable uint m_type : 5;
152 mutable uint m_dirty : 5;
156Q_GUI_EXPORT Q_DECL_CONST_FUNCTION size_t qHash(
const QTransform &key, size_t seed = 0)
noexcept;
159inline QTransform::TransformationType QTransform::inline_type()
const
161 if (m_dirty == TxNone)
162 return static_cast<TransformationType>(m_type);
166inline bool QTransform::isAffine()
const
168 return inline_type() < TxProject;
170inline bool QTransform::isIdentity()
const
172 return inline_type() == TxNone;
175inline bool QTransform::isInvertible()
const
177 return !qFuzzyIsNull(determinant());
180inline bool QTransform::isScaling()
const
182 return type() >= TxScale;
184inline bool QTransform::isRotating()
const
186 return inline_type() >= TxRotate;
189inline bool QTransform::isTranslating()
const
191 return inline_type() >= TxTranslate;
194inline qreal QTransform::determinant()
const
196 return m_matrix[0][0] * (m_matrix[2][2] * m_matrix[1][1] - m_matrix[2][1] * m_matrix[1][2]) -
197 m_matrix[1][0] * (m_matrix[2][2] * m_matrix[0][1] - m_matrix[2][1] * m_matrix[0][2]) +
198 m_matrix[2][0] * (m_matrix[1][2] * m_matrix[0][1] - m_matrix[1][1] * m_matrix[0][2]);
200inline qreal QTransform::m11()
const
202 return m_matrix[0][0];
204inline qreal QTransform::m12()
const
206 return m_matrix[0][1];
208inline qreal QTransform::m13()
const
210 return m_matrix[0][2];
212inline qreal QTransform::m21()
const
214 return m_matrix[1][0];
216inline qreal QTransform::m22()
const
218 return m_matrix[1][1];
220inline qreal QTransform::m23()
const
222 return m_matrix[1][2];
224inline qreal QTransform::m31()
const
226 return m_matrix[2][0];
228inline qreal QTransform::m32()
const
230 return m_matrix[2][1];
232inline qreal QTransform::m33()
const
234 return m_matrix[2][2];
236inline qreal QTransform::dx()
const
238 return m_matrix[2][0];
240inline qreal QTransform::dy()
const
242 return m_matrix[2][1];
246QT_WARNING_DISABLE_FLOAT_COMPARE
248inline QTransform &QTransform::operator*=(qreal num)
252 m_matrix[0][0] *= num;
253 m_matrix[0][1] *= num;
254 m_matrix[0][2] *= num;
255 m_matrix[1][0] *= num;
256 m_matrix[1][1] *= num;
257 m_matrix[1][2] *= num;
258 m_matrix[2][0] *= num;
259 m_matrix[2][1] *= num;
260 m_matrix[2][2] *= num;
261 if (m_dirty < TxScale)
265inline QTransform &QTransform::operator/=(qreal div)
270 return operator*=(div);
272inline QTransform &QTransform::operator+=(qreal num)
276 m_matrix[0][0] += num;
277 m_matrix[0][1] += num;
278 m_matrix[0][2] += num;
279 m_matrix[1][0] += num;
280 m_matrix[1][1] += num;
281 m_matrix[1][2] += num;
282 m_matrix[2][0] += num;
283 m_matrix[2][1] += num;
284 m_matrix[2][2] += num;
288inline QTransform &QTransform::operator-=(qreal num)
292 m_matrix[0][0] -= num;
293 m_matrix[0][1] -= num;
294 m_matrix[0][2] -= num;
295 m_matrix[1][0] -= num;
296 m_matrix[1][1] -= num;
297 m_matrix[1][2] -= num;
298 m_matrix[2][0] -= num;
299 m_matrix[2][1] -= num;
300 m_matrix[2][2] -= num;
307inline bool qFuzzyCompare(
const QTransform& t1,
const QTransform& t2)
noexcept
309 return qFuzzyCompare(t1.m11(), t2.m11())
310 && qFuzzyCompare(t1.m12(), t2.m12())
311 && qFuzzyCompare(t1.m13(), t2.m13())
312 && qFuzzyCompare(t1.m21(), t2.m21())
313 && qFuzzyCompare(t1.m22(), t2.m22())
314 && qFuzzyCompare(t1.m23(), t2.m23())
315 && qFuzzyCompare(t1.m31(), t2.m31())
316 && qFuzzyCompare(t1.m32(), t2.m32())
317 && qFuzzyCompare(t1.m33(), t2.m33());
322#ifndef QT_NO_DATASTREAM
323Q_GUI_EXPORT
QDataStream &operator<<(QDataStream &,
const QTransform &);
327#ifndef QT_NO_DEBUG_STREAM
328Q_GUI_EXPORT
QDebug operator<<(QDebug,
const QTransform &);
348inline QTransform
operator *(
const QTransform &a, qreal n)
349{ QTransform t(a); t *= n;
return t; }
350inline QTransform
operator /(
const QTransform &a, qreal n)
351{ QTransform t(a); t /= n;
return t; }
352inline QTransform
operator +(
const QTransform &a, qreal n)
353{ QTransform t(a); t += n;
return t; }
354inline QTransform
operator -(
const QTransform &a, qreal n)
355{ QTransform t(a); t -= n;
return t; }
\inmodule QtCore\reentrant
\keyword 16-bit Floating Point Support\inmodule QtCore \inheaderfile QFloat16
Combined button and popup list for selecting options.
Q_TRACE_METADATA(qtcore, "ENUM { AUTO, RANGE User ... MaxUser } QEvent::Type;")
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
static QImage rotated90(const QImage &src)
static void copyMetadata(QImage *dst, const QImage &src)
#define QT_XFORM_TYPE_LSBFIRST
static void copyMetadata(QImageData *dst, const QImageData *src)
#define QT_XFORM_TYPE_MSBFIRST
static int next_qimage_serial_number()
#define QIMAGE_SANITYCHECK_MEMORY(image)
static void copyPhysicalMetadata(QImageData *dst, const QImageData *src)
static QImage rotated270(const QImage &src)
QMap< QString, QString > qt_getImageText(const QImage &image, const QString &description)
Q_GUI_EXPORT void qt_imageTransform(QImage &src, QImageIOHandler::Transformations orient)
static QImage rotated180(const QImage &src)
static Qt::Orientations toOrientations(QImageIOHandler::Transformations orient)
QMap< QString, QString > qt_getImageTextFromDescription(const QString &description)