From 78c4d0c48f58854127aa9248f597bf8568f440a1 Mon Sep 17 00:00:00 2001 From: Zhang Hao Date: Mon, 29 Mar 2021 14:55:14 +0800 Subject: [PATCH] Add new enum value VisualTabCharacter into QChar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With this enumeration value, users can get the width of the current font TAB character more conveniently In addition, added some documentation about where users may use this enumeration. Fixes: QTBUG-92205 Done-with: Volker Hilsheimer Done-with: Tor Arne Vestbø Change-Id: I9794b7553e9299e351f9182de02866d07a1393fc Reviewed-by: Tor Arne Vestbø --- src/corelib/text/qchar.cpp | 1 + src/corelib/text/qchar.h | 1 + src/gui/text/qtextlayout.cpp | 2 +- src/widgets/widgets/qplaintextedit.cpp | 8 +++++++- src/widgets/widgets/qtextedit.cpp | 6 ++++++ 5 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/corelib/text/qchar.cpp b/src/corelib/text/qchar.cpp index dcc36d18ce1..7aff25fb4a2 100644 --- a/src/corelib/text/qchar.cpp +++ b/src/corelib/text/qchar.cpp @@ -595,6 +595,7 @@ QT_BEGIN_NAMESPACE \value ByteOrderSwapped \value ParagraphSeparator \value LineSeparator + \value VisualTabCharacter Used to represent a tabulation as a horizontal arrow. Since 6.2. \value LastValidCodePoint */ diff --git a/src/corelib/text/qchar.h b/src/corelib/text/qchar.h index 78d95e39fa8..2a899abf6b8 100644 --- a/src/corelib/text/qchar.h +++ b/src/corelib/text/qchar.h @@ -98,6 +98,7 @@ public: ByteOrderSwapped = 0xfffe, ParagraphSeparator = 0x2029, LineSeparator = 0x2028, + VisualTabCharacter = 0x2192, LastValidCodePoint = 0x10ffff }; diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index b2b87fb92ef..381c1d20cec 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -2617,7 +2617,7 @@ void QTextLine::draw_internal(QPainter *p, const QPointF &pos, gf.width = iterator.itemWidth; QPainterPrivate::get(p)->drawTextItem(QPointF(iterator.x.toReal(), y.toReal()), gf, eng); if (eng->option.flags() & QTextOption::ShowTabsAndSpaces) { - const QChar visualTab = u'\x2192'; + const QChar visualTab = QChar(QChar::VisualTabCharacter); int w = QFontMetrics(f).horizontalAdvance(visualTab); qreal x = iterator.itemWidth.toReal() - w; // Right-aligned if (x < 0) diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 20fdbcd6a85..71aecc42754 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -2497,7 +2497,13 @@ void QPlainTextEdit::setOverwriteMode(bool overwrite) \brief the tab stop distance in pixels \since 5.10 - By default, this property contains a value of 80. + By default, this property contains a value of 80 pixels. + + Do not set a value less than the \l {QFontMetrics::}{horizontalAdvance()} + of the QChar::VisualTabCharacter character, otherwise the tab-character + will be drawn incompletely. + + \sa QTextOption::ShowTabsAndSpaces, QTextDocument::defaultTextOption */ qreal QPlainTextEdit::tabStopDistance() const diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index 2d3f98b4b9e..55fb8adc5d8 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -2066,6 +2066,12 @@ void QTextEdit::setOverwriteMode(bool overwrite) \since 5.10 By default, this property contains a value of 80 pixels. + + Do not set a value less than the \l {QFontMetrics::}{horizontalAdvance()} + of the QChar::VisualTabCharacter character, otherwise the tab-character + will be drawn incompletely. + + \sa QTextOption::ShowTabsAndSpaces, QTextDocument::defaultTextOption */ qreal QTextEdit::tabStopDistance() const