Qt 如何在QLineEdit/QLabel等中从左到右显示阿拉伯符号。?

Qt 如何在QLineEdit/QLabel等中从左到右显示阿拉伯符号。?,qt,arabic,text-alignment,qlineedit,qlabel,Qt,Arabic,Text Alignment,Qlineedit,Qlabel,在Qt的实现中,阿拉伯符号显示在从右到左的方向,因此任何包含阿拉伯符号的字符串都将右对齐 但我的应用程序想要做的是以从左到右的方向显示所有文本,无论它是否包含阿拉伯语符号。所有文本都是左对齐的 示例如下所示: 这就是我想要实现的 这就是QLineEdit以默认方式显示包含阿拉伯符号的文本的方式 这就是QLabel的工作方式 编辑: 将测试字符串粘贴到这里。ە抠门哥ە( 编辑: 提供替代解决方案 最后,我可以通过使用QTextEdit大致实现我的目标,它有一个QTextDocument。

在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);

在关于
setLayoutDirection
的Qt文档中,您可以阅读:

自Qt4.7以来,此方法不再影响文本布局方向

因此,您不能使用此方法。对于
QLineEdit
,您可以向行编辑发送
Qt::Key\u Direction\u L
键盘事件,使其成为从左到右事件(如果字符是阿拉伯语或波斯语):

QKeyEvent event(QEvent::KeyPress, Qt::Key_Direction_L, 0);
qApp->sendEvent(ui->lineEdit, &event);

Unicode提供了方向格式化字符,Qt很好地支持它

因此,对于
QLabel
QLineEdit
等,我们可以插入
LRM
控制字符
,它是在Unicode双向算法中定义的,位于右对齐左对齐字符串的开始处。有关Unicode双向算法的详细信息,请单击

对于
qtextdedit
等具有
QTextDocument
的文本,我们可以通过将
QTextDocument
设置为
Qt::leftoright
来进行右向左对齐

ps:
QString
有一个
isRightToLeft
成员函数,用于确定字符串是否为RightToLeft。例如,以从从右到左的符号开头的字符串是RightToLeft


我回答了,这可能有助于找到您自己的解决方案。

谢谢。我会尝试一下。但我认为它有局限性,如果有更常见的方法来解决这个问题,那就太好了。
QString(QChar(0x200E))+strText;