在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双向算法,请单击这里。
QString( QChar(0x200E) ) + strText;
QString
有一个isRightToLeft
成员函数来决定字符串是否是RightToLeft。例如,以Right-to-left写入语言的符号开头的字符串是RightToLeft.。