有没有办法改变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
目前我们无法更改制表符和空格的字符。这个字符在 Qt 源代码中硬编码为 QTextLayout:
QChar visualTab(0x2192);
...
QChar visualSpace((ushort)0xb7);
更多信息请参见 GitHub 上的 QTextLayout 源代码。
您可以为制表符和空格自定义字符创建功能请求。恕我直言,此功能对于基于 Qt 的自定义编辑器非常有用。
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
·
°
→
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
};