Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquicktext_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QQUICKTEXT_P_H
6#define QQUICKTEXT_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
21#include <private/qtquickglobal_p.h>
22#include <QtGui/qtextoption.h>
23
24QT_BEGIN_NAMESPACE
25
26class QQuickTextPrivate;
27class QQuickTextLine;
28class Q_QUICK_EXPORT QQuickText : public QQuickImplicitSizeItem, public QQuickTextInterface
29{
30 Q_OBJECT
31 Q_INTERFACES(QQuickTextInterface)
32
33 Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
34 Q_PROPERTY(QFont font READ font WRITE setFont NOTIFY fontChanged)
35 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
36 Q_PROPERTY(QColor linkColor READ linkColor WRITE setLinkColor NOTIFY linkColorChanged)
37 Q_PROPERTY(TextStyle style READ style WRITE setStyle NOTIFY styleChanged)
38 Q_PROPERTY(QColor styleColor READ styleColor WRITE setStyleColor NOTIFY styleColorChanged)
39 Q_PROPERTY(HAlignment horizontalAlignment READ hAlign WRITE setHAlign RESET resetHAlign NOTIFY horizontalAlignmentChanged)
40 Q_PROPERTY(HAlignment effectiveHorizontalAlignment READ effectiveHAlign NOTIFY effectiveHorizontalAlignmentChanged)
41 Q_PROPERTY(VAlignment verticalAlignment READ vAlign WRITE setVAlign NOTIFY verticalAlignmentChanged)
42 Q_PROPERTY(WrapMode wrapMode READ wrapMode WRITE setWrapMode NOTIFY wrapModeChanged)
43 Q_PROPERTY(int lineCount READ lineCount NOTIFY lineCountChanged)
44 Q_PROPERTY(bool truncated READ truncated NOTIFY truncatedChanged)
45 Q_PROPERTY(int maximumLineCount READ maximumLineCount WRITE setMaximumLineCount NOTIFY maximumLineCountChanged RESET resetMaximumLineCount)
46
47 Q_PROPERTY(TextFormat textFormat READ textFormat WRITE setTextFormat NOTIFY textFormatChanged)
48 Q_PROPERTY(TextElideMode elide READ elideMode WRITE setElideMode NOTIFY elideModeChanged) //### elideMode?
49 Q_PROPERTY(qreal contentWidth READ contentWidth NOTIFY contentWidthChanged)
50 Q_PROPERTY(qreal contentHeight READ contentHeight NOTIFY contentHeightChanged)
51 Q_PROPERTY(qreal paintedWidth READ contentWidth NOTIFY contentWidthChanged) // Compatibility
52 Q_PROPERTY(qreal paintedHeight READ contentHeight NOTIFY contentHeightChanged)
53 Q_PROPERTY(qreal lineHeight READ lineHeight WRITE setLineHeight NOTIFY lineHeightChanged)
54 Q_PROPERTY(LineHeightMode lineHeightMode READ lineHeightMode WRITE setLineHeightMode NOTIFY lineHeightModeChanged)
55 Q_PROPERTY(QUrl baseUrl READ baseUrl WRITE setBaseUrl RESET resetBaseUrl NOTIFY baseUrlChanged)
56 Q_PROPERTY(int minimumPixelSize READ minimumPixelSize WRITE setMinimumPixelSize NOTIFY minimumPixelSizeChanged)
57 Q_PROPERTY(int minimumPointSize READ minimumPointSize WRITE setMinimumPointSize NOTIFY minimumPointSizeChanged)
58 Q_PROPERTY(FontSizeMode fontSizeMode READ fontSizeMode WRITE setFontSizeMode NOTIFY fontSizeModeChanged)
59 Q_PROPERTY(RenderType renderType READ renderType WRITE setRenderType NOTIFY renderTypeChanged)
60 Q_PROPERTY(QString hoveredLink READ hoveredLink NOTIFY linkHovered REVISION(2, 2))
61 Q_PROPERTY(int renderTypeQuality READ renderTypeQuality WRITE setRenderTypeQuality NOTIFY renderTypeQualityChanged REVISION(6, 0))
62
63 Q_PROPERTY(qreal padding READ padding WRITE setPadding RESET resetPadding NOTIFY paddingChanged REVISION(2, 6))
64 Q_PROPERTY(qreal topPadding READ topPadding WRITE setTopPadding RESET resetTopPadding NOTIFY topPaddingChanged REVISION(2, 6))
65 Q_PROPERTY(qreal leftPadding READ leftPadding WRITE setLeftPadding RESET resetLeftPadding NOTIFY leftPaddingChanged REVISION(2, 6))
66 Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding RESET resetRightPadding NOTIFY rightPaddingChanged REVISION(2, 6))
67 Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET resetBottomPadding NOTIFY bottomPaddingChanged REVISION(2, 6))
68
69 Q_PROPERTY(QJSValue fontInfo READ fontInfo NOTIFY fontInfoChanged REVISION(2, 9))
70 Q_PROPERTY(QSizeF advance READ advance NOTIFY contentSizeChanged REVISION(2, 10))
71 QML_NAMED_ELEMENT(Text)
72 QML_ADDED_IN_VERSION(2, 0)
73
74public:
75 QQuickText(QQuickItem *parent=nullptr);
76 ~QQuickText() override;
77
78 enum HAlignment { AlignLeft = Qt::AlignLeft,
79 AlignRight = Qt::AlignRight,
80 AlignHCenter = Qt::AlignHCenter,
81 AlignJustify = Qt::AlignJustify };
82 Q_ENUM(HAlignment)
83 enum VAlignment { AlignTop = Qt::AlignTop,
84 AlignBottom = Qt::AlignBottom,
85 AlignVCenter = Qt::AlignVCenter };
86 Q_ENUM(VAlignment)
87 enum TextStyle { Normal,
88 Outline,
89 Raised,
90 Sunken };
91 Q_ENUM(TextStyle)
92 enum TextFormat { PlainText = Qt::PlainText,
93 RichText = Qt::RichText,
94 MarkdownText = Qt::MarkdownText,
95 AutoText = Qt::AutoText,
96 StyledText = 4 };
97 Q_ENUM(TextFormat)
98 enum TextElideMode { ElideLeft = Qt::ElideLeft,
99 ElideRight = Qt::ElideRight,
100 ElideMiddle = Qt::ElideMiddle,
101 ElideNone = Qt::ElideNone };
102 Q_ENUM(TextElideMode)
103
104 enum WrapMode { NoWrap = QTextOption::NoWrap,
105 WordWrap = QTextOption::WordWrap,
106 WrapAnywhere = QTextOption::WrapAnywhere,
107 WrapAtWordBoundaryOrAnywhere = QTextOption::WrapAtWordBoundaryOrAnywhere, // COMPAT
108 Wrap = QTextOption::WrapAtWordBoundaryOrAnywhere
109 };
110 Q_ENUM(WrapMode)
111
112 enum RenderType { QtRendering,
113 NativeRendering,
114 CurveRendering
115 };
116 Q_ENUM(RenderType)
117
118 enum RenderTypeQuality { DefaultRenderTypeQuality = -1,
119 LowRenderTypeQuality = 26,
120 NormalRenderTypeQuality = 52,
121 HighRenderTypeQuality = 104,
122 VeryHighRenderTypeQuality = 208
123 };
124 Q_ENUM(RenderTypeQuality)
125
126 enum LineHeightMode { ProportionalHeight, FixedHeight };
127 Q_ENUM(LineHeightMode)
128
129 enum FontSizeMode { FixedSize = 0x0, HorizontalFit = 0x01, VerticalFit = 0x02,
130 Fit = HorizontalFit | VerticalFit };
131 Q_ENUM(FontSizeMode)
132
133 QString text() const;
134 void setText(const QString &);
135
136 QFont font() const;
137 void setFont(const QFont &font);
138
139 QColor color() const;
140 void setColor(const QColor &c);
141
142 QColor linkColor() const;
143 void setLinkColor(const QColor &color);
144
145 TextStyle style() const;
146 void setStyle(TextStyle style);
147
148 QColor styleColor() const;
149 void setStyleColor(const QColor &c);
150
151 HAlignment hAlign() const;
152 void setHAlign(HAlignment align);
153 void resetHAlign();
154 HAlignment effectiveHAlign() const;
155
156 VAlignment vAlign() const;
157 void setVAlign(VAlignment align);
158
159 WrapMode wrapMode() const;
160 void setWrapMode(WrapMode w);
161
162 int lineCount() const;
163 bool truncated() const;
164
165 int maximumLineCount() const;
166 void setMaximumLineCount(int lines);
167 void resetMaximumLineCount();
168
169 TextFormat textFormat() const;
170 void setTextFormat(TextFormat format);
171
172 TextElideMode elideMode() const;
173 void setElideMode(TextElideMode);
174
175 qreal lineHeight() const;
176 void setLineHeight(qreal lineHeight);
177
178 LineHeightMode lineHeightMode() const;
179 void setLineHeightMode(LineHeightMode);
180
181
182 QUrl baseUrl() const;
183 void setBaseUrl(const QUrl &url);
184 void resetBaseUrl();
185
186 int minimumPixelSize() const;
187 void setMinimumPixelSize(int size);
188
189 int minimumPointSize() const;
190 void setMinimumPointSize(int size);
191
192 FontSizeMode fontSizeMode() const;
193 void setFontSizeMode(FontSizeMode mode);
194
195 void componentComplete() override;
196
197 int resourcesLoading() const; // mainly for testing
198
199 qreal contentWidth() const;
200 qreal contentHeight() const;
201
202 QRectF boundingRect() const override;
203 QRectF clipRect() const override;
204#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
205#if QT_DEPRECATED_SINCE(5, 15)
206 QT_DEPRECATED_X("Use forceLayout() instead")
207 Q_INVOKABLE void doLayout();
208#endif
209#endif
210 Q_REVISION(2, 9) Q_INVOKABLE void forceLayout();
211
212 RenderType renderType() const;
213 void setRenderType(RenderType renderType);
214
215 int renderTypeQuality() const;
216 void setRenderTypeQuality(int renderTypeQuality);
217
218 QString hoveredLink() const;
219
220 Q_REVISION(2, 3) Q_INVOKABLE QString linkAt(qreal x, qreal y) const;
221
222 qreal padding() const;
223 void setPadding(qreal padding);
224 void resetPadding();
225
226 qreal topPadding() const;
227 void setTopPadding(qreal padding);
228 void resetTopPadding();
229
230 qreal leftPadding() const;
231 void setLeftPadding(qreal padding);
232 void resetLeftPadding();
233
234 qreal rightPadding() const;
235 void setRightPadding(qreal padding);
236 void resetRightPadding();
237
238 qreal bottomPadding() const;
239 void setBottomPadding(qreal padding);
240 void resetBottomPadding();
241
242 QJSValue fontInfo() const;
243 QSizeF advance() const;
244
245 void invalidate() override;
246
247Q_SIGNALS:
248 void textChanged(const QString &text);
249 void linkActivated(const QString &link);
250 Q_REVISION(2, 2) void linkHovered(const QString &link);
251 void fontChanged(const QFont &font);
252 void colorChanged();
253 void linkColorChanged();
254 void styleChanged(QQuickText::TextStyle style);
255 void styleColorChanged();
256 void horizontalAlignmentChanged(QQuickText::HAlignment alignment);
257 void verticalAlignmentChanged(QQuickText::VAlignment alignment);
258 void wrapModeChanged();
259 void lineCountChanged();
260 void truncatedChanged();
261 void maximumLineCountChanged();
262 void textFormatChanged(QQuickText::TextFormat textFormat);
263 void elideModeChanged(QQuickText::TextElideMode mode);
264 void contentSizeChanged();
265 // The next two signals should be marked as Q_REVISION(2, 12). See QTBUG-71247
266 void contentWidthChanged(qreal contentWidth);
267 void contentHeightChanged(qreal contentHeight);
268
269 void lineHeightChanged(qreal lineHeight);
270 void lineHeightModeChanged(QQuickText::LineHeightMode mode);
271 void fontSizeModeChanged();
272 void minimumPixelSizeChanged();
273 void minimumPointSizeChanged();
274 void effectiveHorizontalAlignmentChanged();
275 void lineLaidOut(QQuickTextLine *line);
276 void baseUrlChanged();
277 void renderTypeChanged();
278 Q_REVISION(2, 6) void paddingChanged();
279 Q_REVISION(2, 6) void topPaddingChanged();
280 Q_REVISION(2, 6) void leftPaddingChanged();
281 Q_REVISION(2, 6) void rightPaddingChanged();
282 Q_REVISION(2, 6) void bottomPaddingChanged();
283 Q_REVISION(2, 9) void fontInfoChanged();
284 Q_REVISION(6, 0) void renderTypeQualityChanged();
285
286protected:
287 QQuickText(QQuickTextPrivate &dd, QQuickItem *parent = nullptr);
288
289 void mousePressEvent(QMouseEvent *event) override;
290 void mouseReleaseEvent(QMouseEvent *event) override;
291 void itemChange(ItemChange change, const ItemChangeData &value) override;
292 void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
293 QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
294
295 void updatePolish() override;
296
297 void hoverEnterEvent(QHoverEvent *event) override;
298 void hoverMoveEvent(QHoverEvent *event) override;
299 void hoverLeaveEvent(QHoverEvent *event) override;
300 void invalidateFontCaches();
301
302private Q_SLOTS:
303 void q_updateLayout();
304 void triggerPreprocess();
305 Q_REVISION(6, 7) QVariant loadResource(int type, const QUrl &source);
306 void resourceRequestFinished();
307 void imageDownloadFinished();
308
309private:
310 Q_DISABLE_COPY(QQuickText)
311 Q_DECLARE_PRIVATE(QQuickText)
312};
313
314Q_DECLARE_MIXED_ENUM_OPERATORS_SYMMETRIC(int, QQuickText::HAlignment, QQuickText::VAlignment)
315
316class QTextLine;
317class Q_QUICK_EXPORT QQuickTextLine : public QObject
318{
319 Q_OBJECT
320 Q_PROPERTY(int number READ number FINAL)
321 Q_PROPERTY(qreal width READ width WRITE setWidth FINAL)
322 Q_PROPERTY(qreal height READ height WRITE setHeight FINAL)
323 Q_PROPERTY(qreal x READ x WRITE setX FINAL)
324 Q_PROPERTY(qreal y READ y WRITE setY FINAL)
325 Q_PROPERTY(qreal implicitWidth READ implicitWidth REVISION(2, 15) FINAL)
326 Q_PROPERTY(bool isLast READ isLast REVISION(2, 15) FINAL)
327 QML_ANONYMOUS
328 QML_ADDED_IN_VERSION(2, 0)
329
330public:
331 QQuickTextLine();
332
333 void setLine(QTextLine* line);
334 void setLineOffset(int offset);
335 void setFullLayoutTextLength(int length);
336 int number() const;
337 qreal implicitWidth() const;
338 bool isLast() const;
339
340 qreal width() const;
341 void setWidth(qreal width);
342
343 qreal height() const;
344 void setHeight(qreal height);
345
346 qreal x() const;
347 void setX(qreal x);
348
349 qreal y() const;
350 void setY(qreal y);
351
352private:
353 QTextLine *m_line;
354 qreal m_height;
355 int m_lineOffset;
356 int m_fullLayoutTextLength;
357};
358
359QT_END_NAMESPACE
360
361#endif // QQUICKTEXT_P_H
For specifying a pen used for drawing rectangle borders on a QQuickView.
static void qt_quickitems_defineModule()