在Qt的实现中,阿拉伯符号从右到左的方向显示,因此任何包含阿拉伯符号的字符串都将右对齐。

但是我的应用程序想要做的是在左到右方向上显示所有文本,无论是否包含阿拉伯符号。并且所有文本都左对齐。

一个例子如下所示:

  • 这是我要实现的

    qt - 如何在QLineEdit/QLabel等中从左到右显示阿拉伯符号?-LMLPHP
  • 这是 QLineEdit 以默认方式显示包含阿拉伯符号的文本的方式

    qt - 如何在QLineEdit/QLabel等中从左到右显示阿拉伯符号?-LMLPHP
  • 这是 QLabel 的工作方式

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

  • 编辑:

    将测试字符串粘贴到此处。劈抠门哥劈(

    编辑:

    提供替代解决方案。

    最后,我可以使用具有QTextEditQTextDocument大致实现我的目标。以下代码片段显示了我是如何做到的。但是我不知道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,这可能有助于您找到自己的解决方案。

    09-08 00:38