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

标签 qt arabic text-alignment qlineedit qlabel

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

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

一个例子如下所示:

  • 这是我要实现的

    what I want to implement
  • 这是 QLineEdit 以默认方式显示包含阿拉伯符号的文本的方式

    arabic notation in QLineEdit
  • 这是 QLabel 的工作方式

    arabic notation in QLabel

  • 编辑:

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

    编辑:

    提供替代解决方案。

    最后,我可以使用具有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,这可能有助于您找到自己的解决方案。

    关于qt - 如何在QLineEdit/QLabel等中从左到右显示阿拉伯符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27517981/

    相关文章:

    sql - 如何在 SQLite 中使用阿拉伯逗号选择 SQL

    css - LI 的均匀分布在 IE7 中不起作用

    html - 如何在 div 的中心左对齐文本?

    text - SwiftUI 文本对齐对齐

    multithreading - 如何在主线程上执行回调

    c++ - QHBoxLayout间距

    c++ - 将 QLabel 与自定义 QGraphicsItem 对齐

    linux - 是否可以在 linux 上的 qt 中渲染 .doc 文件?

    java - 如何创建用于解析阿拉伯日期的正则表达式

    text - Javafx 2.0 阿拉伯文文本顺序不正确