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