7#include <QtGui/qtguiglobal.h>
8#include <QtGui/qpolygon.h>
9#include <QtGui/qregion.h>
10#include <QtGui/qwindowdefs.h>
11#include <QtCore/qline.h>
12#include <QtCore/qpoint.h>
13#include <QtCore/qrect.h>
23 enum TransformationType {
32 inline explicit QTransform(Qt::Initialization) {}
34 : m_matrix{ {1, 0, 0}, {0, 1, 0}, {0, 0, 1} }
37 QTransform(qreal h11, qreal h12, qreal h13,
38 qreal h21, qreal h22, qreal h23,
39 qreal h31, qreal h32, qreal h33)
40 : m_matrix{ {h11, h12, h13}, {h21, h22, h23}, {h31, h32, h33} }
42 , m_dirty(TxProject) {}
43 QTransform(qreal h11, qreal h12, qreal h21,
44 qreal h22, qreal dx, qreal dy)
45 : m_matrix{ {h11, h12, 0}, {h21, h22, 0}, {dx, dy, 1} }
49 QTransform &operator=(QTransform &&other)
noexcept =
default;
50 QTransform &operator=(
const QTransform &)
noexcept =
default;
51 QTransform(QTransform &&other)
noexcept =
default;
52 QTransform(
const QTransform &other)
noexcept =
default;
54 bool isAffine()
const;
55 bool isIdentity()
const;
56 bool isInvertible()
const;
57 bool isScaling()
const;
58 bool isRotating()
const;
59 bool isTranslating()
const;
61 TransformationType type()
const;
63 inline qreal determinant()
const;
77 void setMatrix(qreal m11, qreal m12, qreal m13,
78 qreal m21, qreal m22, qreal m23,
79 qreal m31, qreal m32, qreal m33);
81 [[nodiscard]] QTransform inverted(
bool *invertible =
nullptr)
const;
82 [[nodiscard]] QTransform adjoint()
const;
83 [[nodiscard]] QTransform transposed()
const;
85 QTransform &translate(qreal dx, qreal dy);
86 QTransform &scale(qreal sx, qreal sy);
87 QTransform &shear(qreal sh, qreal sv);
88#if QT_VERSION < QT_VERSION_CHECK(7
, 0
, 0
)
89 QTransform &rotate(qreal a, Qt::Axis axis, qreal distanceToPlane);
91 QTransform &rotate(qreal a, Qt::Axis axis = Qt::ZAxis);
92 QTransform &rotateRadians(qreal a, Qt::Axis axis, qreal distanceToPlane);
94 QTransform &rotateRadians(qreal a, Qt::Axis axis = Qt::ZAxis);
96 QTransform &rotate(qreal a, Qt::Axis axis = Qt::ZAxis, qreal distanceToPlane = 1024.0f);
97 QTransform &rotateRadians(qreal a, Qt::Axis axis = Qt::ZAxis, qreal distanceToPlane = 1024.0f);
100 static bool squareToQuad(
const QPolygonF &square, QTransform &result);
101 static bool quadToSquare(
const QPolygonF &quad, QTransform &result);
102 static bool quadToQuad(
const QPolygonF &one,
103 const QPolygonF &two,
106 bool operator==(
const QTransform &)
const;
107 bool operator!=(
const QTransform &)
const;
109 QTransform &operator*=(
const QTransform &);
110 QTransform operator*(
const QTransform &o)
const;
112 operator QVariant()
const;
115 QPoint map(
const QPoint &p)
const;
116 QPointF map(
const QPointF &p)
const;
117 QLine map(
const QLine &l)
const;
118 QLineF map(
const QLineF &l)
const;
119 QPolygonF map(
const QPolygonF &a)
const;
120 QPolygon map(
const QPolygon &a)
const;
121 QRegion map(
const QRegion &r)
const;
122 QPainterPath map(
const QPainterPath &p)
const;
123 QPolygon mapToPolygon(
const QRect &r)
const;
124 QRect mapRect(
const QRect &)
const;
125 QRectF mapRect(
const QRectF &)
const;
126 void map(
int x,
int y,
int *tx,
int *ty)
const;
127 void map(qreal x, qreal y, qreal *tx, qreal *ty)
const;
129 QTransform &operator*=(qreal div);
130 QTransform &operator/=(qreal div);
131 QTransform &operator+=(qreal div);
132 QTransform &operator-=(qreal div);
134 static QTransform fromTranslate(qreal dx, qreal dy);
135 static QTransform fromScale(qreal dx, qreal dy);
139 qreal (& m_matrix)[3][3];
143 auto asAffineMatrix() {
return Affine { m_matrix }; }
144 friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &s, Affine &m);
145 friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &s,
const Affine &m);
148 inline TransformationType inline_type()
const;
149 void do_map(qreal x, qreal y, qreal &nx, qreal &ny)
const;
150 qreal m_matrix[3][3];
152 mutable uint m_type : 5;
153 mutable uint m_dirty : 5;
157Q_GUI_EXPORT Q_DECL_CONST_FUNCTION size_t qHash(
const QTransform &key, size_t seed = 0)
noexcept;
160inline QTransform::TransformationType QTransform::inline_type()
const
162 if (m_dirty == TxNone)
163 return static_cast<TransformationType>(m_type);
167inline bool QTransform::isAffine()
const
169 return inline_type() < TxProject;
171inline bool QTransform::isIdentity()
const
173 return inline_type() == TxNone;
176inline bool QTransform::isInvertible()
const
178 return !qFuzzyIsNull(determinant());
181inline bool QTransform::isScaling()
const
183 return type() >= TxScale;
185inline bool QTransform::isRotating()
const
187 return inline_type() >= TxRotate;
190inline bool QTransform::isTranslating()
const
192 return inline_type() >= TxTranslate;
195inline qreal QTransform::determinant()
const
197 return m_matrix[0][0] * (m_matrix[2][2] * m_matrix[1][1] - m_matrix[2][1] * m_matrix[1][2]) -
198 m_matrix[1][0] * (m_matrix[2][2] * m_matrix[0][1] - m_matrix[2][1] * m_matrix[0][2]) +
199 m_matrix[2][0] * (m_matrix[1][2] * m_matrix[0][1] - m_matrix[1][1] * m_matrix[0][2]);
201inline qreal QTransform::m11()
const
203 return m_matrix[0][0];
205inline qreal QTransform::m12()
const
207 return m_matrix[0][1];
209inline qreal QTransform::m13()
const
211 return m_matrix[0][2];
213inline qreal QTransform::m21()
const
215 return m_matrix[1][0];
217inline qreal QTransform::m22()
const
219 return m_matrix[1][1];
221inline qreal QTransform::m23()
const
223 return m_matrix[1][2];
225inline qreal QTransform::m31()
const
227 return m_matrix[2][0];
229inline qreal QTransform::m32()
const
231 return m_matrix[2][1];
233inline qreal QTransform::m33()
const
235 return m_matrix[2][2];
237inline qreal QTransform::dx()
const
239 return m_matrix[2][0];
241inline qreal QTransform::dy()
const
243 return m_matrix[2][1];
247QT_WARNING_DISABLE_FLOAT_COMPARE
249inline QTransform &QTransform::operator*=(qreal num)
253 m_matrix[0][0] *= num;
254 m_matrix[0][1] *= num;
255 m_matrix[0][2] *= num;
256 m_matrix[1][0] *= num;
257 m_matrix[1][1] *= num;
258 m_matrix[1][2] *= num;
259 m_matrix[2][0] *= num;
260 m_matrix[2][1] *= num;
261 m_matrix[2][2] *= num;
262 if (m_dirty < TxScale)
266inline QTransform &QTransform::operator/=(qreal div)
271 return operator*=(div);
273inline QTransform &QTransform::operator+=(qreal num)
277 m_matrix[0][0] += num;
278 m_matrix[0][1] += num;
279 m_matrix[0][2] += num;
280 m_matrix[1][0] += num;
281 m_matrix[1][1] += num;
282 m_matrix[1][2] += num;
283 m_matrix[2][0] += num;
284 m_matrix[2][1] += num;
285 m_matrix[2][2] += num;
289inline QTransform &QTransform::operator-=(qreal num)
293 m_matrix[0][0] -= num;
294 m_matrix[0][1] -= num;
295 m_matrix[0][2] -= num;
296 m_matrix[1][0] -= num;
297 m_matrix[1][1] -= num;
298 m_matrix[1][2] -= num;
299 m_matrix[2][0] -= num;
300 m_matrix[2][1] -= num;
301 m_matrix[2][2] -= num;
308inline bool qFuzzyCompare(
const QTransform& t1,
const QTransform& t2)
noexcept
310 return qFuzzyCompare(t1.m11(), t2.m11())
311 && qFuzzyCompare(t1.m12(), t2.m12())
312 && qFuzzyCompare(t1.m13(), t2.m13())
313 && qFuzzyCompare(t1.m21(), t2.m21())
314 && qFuzzyCompare(t1.m22(), t2.m22())
315 && qFuzzyCompare(t1.m23(), t2.m23())
316 && qFuzzyCompare(t1.m31(), t2.m31())
317 && qFuzzyCompare(t1.m32(), t2.m32())
318 && qFuzzyCompare(t1.m33(), t2.m33());
323#ifndef QT_NO_DATASTREAM
324Q_GUI_EXPORT
QDataStream &operator<<(QDataStream &,
const QTransform &);
328#ifndef QT_NO_DEBUG_STREAM
329Q_GUI_EXPORT
QDebug operator<<(QDebug,
const QTransform &);
349inline QTransform
operator *(
const QTransform &a, qreal n)
350{ QTransform t(a); t *= n;
return t; }
351inline QTransform
operator /(
const QTransform &a, qreal n)
352{ QTransform t(a); t /= n;
return t; }
353inline QTransform
operator +(
const QTransform &a, qreal n)
354{ QTransform t(a); t += n;
return t; }
355inline QTransform
operator -(
const QTransform &a, qreal n)
356{ 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)