如何更改QTextOption.ShowTabsAndSpaces使用的字符?

问题描述 投票:0回答:2

有没有办法改变QT的

QTextOption.ShowTabsAndSpaces
标志使用哪个字符?

我发现用于查看空白(特别是空格)的默认字符有点过于突出。我想更改使用的字体或字符,使其不那么明显。

看起来使用的字符是unicode“中点”,

·
(U+00B7),我想使用,比如说,U+02D1
ˑ

理想情况下,我希望能够将其设置为用户想要的任何内容。

我一直在搜索 Qt 文档,但只能找到如何打开此标志(here)。

编辑:

我想我应该展示一些代码...这是我当前添加空白指示符的方式:

opts = self.document().defaultTextOption()
opts.setFlags(opts.flags() | QTextOption.ShowTabsAndSpaces)
self.document().setDefaultTextOption(opts)

运行 Python 3.4 和 PyQt4,但应该能够移植 C++ 代码。

编辑2:

感谢 Andrei Shikalev 在下面的回答,我已在 QT 跟踪器上发布了此功能请求:https://bugreports.qt.io/browse/QTBUG-46072

python qt python-3.x pyqt4
2个回答
3
投票

目前我们无法更改制表符和空格的字符。这个字符在 Qt 源代码中硬编码为 QTextLayout:

QChar visualTab(0x2192);
...
QChar visualSpace((ushort)0xb7);

更多信息请参见 GitHub 上的 QTextLayout 源代码

您可以为制表符和空格自定义字符创建功能请求。恕我直言,此功能对于基于 Qt 的自定义编辑器非常有用。


0
投票
注意:void

QTextLine::draw_internal(...)

代码在Qt 6中仍然是硬编码的。更新的链接和信息:

  • https://github.com/qt/qtbase/blob/dev/src/gui/text/qtextlayout.cpp#L2780

  • https://github.com/qt/qtbase/blob/dev/src/gui/text/qtextlayout.cpp#L2862

  • https://github.com/qt/qtbase/blob/dev/src/corelib/text/qchar.h#L46

  • 空间:

    ·

    
    

  • NBSP:

    °

    
    

  • 选项卡:

    
    

if (eng->option.flags() & QTextOption::ShowTabsAndSpaces) { const QChar visualTab = QChar(QChar::VisualTabCharacter); } if ((si.analysis.flags == QScriptAnalysis::Space || si.analysis.flags == QScriptAnalysis::Nbsp) && (eng->option.flags() & QTextOption::ShowTabsAndSpaces) ) { const QChar visualSpace = si.analysis.flags == QScriptAnalysis::Space ? u'\xb7' : u'\xb0'; } enum SpecialCharacter { Null = 0x0000, Tabulation = 0x0009, LineFeed = 0x000a, FormFeed = 0x000c, CarriageReturn = 0x000d, Space = 0x0020, Nbsp = 0x00a0, SoftHyphen = 0x00ad, ReplacementCharacter = 0xfffd, ObjectReplacementCharacter = 0xfffc, ByteOrderMark = 0xfeff, ByteOrderSwapped = 0xfffe, ParagraphSeparator = 0x2029, LineSeparator = 0x2028, VisualTabCharacter = 0x2192, LastValidCodePoint = 0x10ffff };
    
© www.soinside.com 2019 - 2024. All rights reserved.