在Qt的实现中,阿拉伯符号以从右到左的方向显示,因此任何包含阿拉伯符号的字符串都将右对齐。
但是我的应用程序想要做的是在左到右方向上显示所有文本,无论是否包含阿拉伯符号。并且所有文本都左对齐。
一个例子如下所示:
QLineEdit
以默认方式显示包含阿拉伯符号的文本的方式QLabel
的工作方式编辑:
将测试字符串粘贴到此处。劈抠门哥劈(
编辑:
提供替代解决方案。
最后,我可以使用具有
QTextEdit
的QTextDocument
大致实现我的目标。以下代码片段显示了我是如何做到的。但是我不知道Qt是如何从全局角度处理文本方向的,所以我无法通过QLabel
等实现我的目标。如果有人可以提供一些有关Qt文本引擎的详细信息,那就太好了。 QTextDocument *doc = ui->textEdit->document();
QTextOption textOption = doc->defaultTextOption();
textOption.setTextDirection(Qt::LeftToRight);
doc->setDefaultTextOption(textOption);
ui->textEdit->setDocument(doc);
最佳答案
Unicode提供了方向格式字符,而Qt很好地支持它。
因此,对于 QLabel
和 QLineEdit
等,我们可以插入 LRM
控制字符
(在 Unicode双向算法中定义),在 RightToLeft 字符串的开头,将字符串左对齐。有关 Unicode双向算法的更多信息,请单击here。
QString(QChar(0x200E))+strText;
对于具有
QTextEdit
的 QTextDocument
等,我们可以通过将 QTextDocment
设置为来使 RightToLeft 字符串左对齐。ps:
textDirection
具有 Qt::LeftToRight
成员函数,用于确定字符串是否为 RightToLeft 。例如,以从右到左书写语言的符号开头的字符串是 RightToLeft 。我回答了another one,这可能有助于您找到自己的解决方案。