在QTextEdit中使用对齐方式时如何消除阿拉伯字母之间的间隙

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

我使用

QTextEdit
显示阿拉伯文本,但当我调整文本时,字母之间存在微小间隙。

这是它的外观示例:

in-between letters gap

我强调了这里的差距:

Highlighted gaps

我尝试改变:

  • 字体。

  • 字体粗细。

  • 字体大小。

  • 换行模式。

  • 字体字母间距(当我给它一个负值时,这个间距缩小了一点,但这不是解决方案)。

  • 字体字间距。

  • 启用/禁用字距微调。

但是同样的问题。

qt arabic qtextedit
1个回答
2
投票

该问题是由于对拉丁字母应用阿拉伯字母的理由而引起的。

与拉丁字母不同,阿拉伯字母之间不能有空格,并且由于在

QTextEdit
中对齐文本似乎会扰乱字母间距,因此它不能应用于阿拉伯文本,因为它只会使其看起来丑陋且难以阅读,因为字母之间的间隙。

一种似乎部分有效的解决方案是使用所用字体的 stretch 度量。就我而言,值

50
使间隙几乎完全消失,但它太紧了。

QFont f=text->font();

f.setStretch(50);
f.setLetterSpacing(QFont::AbsoluteSpacing,-0.3);
f.setWordSpacing(2);
text->setFont(f);

您还可以将其与自定义字母和单词间距相结合,这取决于您的情况以及它如何影响您的文本。

你可以看一下结果,差别还是蛮明显的。

之前:

Text before applying the aforementioned solution

之后:

Text after applying the aforementioned solution


注:

  • 解决这个问题的正确方法是使用一种算法,将 kashidas ('ـ') 插入到阿拉伯文本中,而不是操纵字体规格,但这在 Qt 中不可用,必须自己这样做,这这不是一件容易的事。
© www.soinside.com 2019 - 2024. All rights reserved.