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

3
在Qt的实现中,阿拉伯符号以从右到左的方向显示,因此包含阿拉伯符号的任何字符串都将右对齐。
但是我的应用程序想要做的是将所有文本都显示为从左到右的方向,无论是否包含阿拉伯符号。并且所有文本都是左对齐的。
下面是一个示例:
  • 这是我想要实现的

    我想要实现的

  • 这是QLineEdit在默认情况下显示包含阿拉伯符号的文本的方式

    QLineEdit中的阿拉伯符号

  • 这是QLabel的显示方式

    QLabel中的阿拉伯符号

编辑:

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

编辑:

提供另一种解决方案。

最终,我可以通过使用具有 QTextDocumentQTextEdit 来大致实现我的目标。下面的代码片段展示了我是如何做到的。但我不知道Qt如何从全局角度处理文本方向,因此我无法通过使用 QLabel 等来实现我的目标...如果有人能提供关于Qt文本引擎的详细信息,那就太好了。
QTextDocument *doc = ui->textEdit->document();
QTextOption textOption = doc->defaultTextOption();
textOption.setTextDirection(Qt::LeftToRight);
doc->setDefaultTextOption(textOption);
ui->textEdit->setDocument(doc);
2个回答

6
Unicode提供了方向性格式字符,而Qt对此有很好的支持。因此,对于QLabel和QLineEdit等控件,我们可以在从右到左的字符串开头插入一个LRM控制字符,该字符定义在Unicode双向算法中,以使字符串左对齐。有关Unicode双向算法的更多信息,请单击这里
QString(QChar(0x200E))+strText;

对于具有 QTextDocument QTextEdit 等控件,我们可以通过将 QTextDocumenttextDirection 设置为 Qt::LeftToRight 来使 从右到左 的字符串实现左对齐
注:
QString 有一个 isRightToLeft 成员函数,用于判断字符串是否是 从右到左 的。例如,以从 从右到左 的书写语言的符号开头的字符串就是 从右到左 的。
我回答了 另一个问题,这可能有助于找到您自己的解决方案。

2
在Qt文档关于setLayoutDirection的说明中,你可以读到:

自从Qt 4.7以后,这个方法不再影响文本布局方向。

所以你不能再使用这个方法。对于QLineEdit,如果字符是阿拉伯或波斯语,你可以发送一个Qt :: Key_Direction_L键盘事件给行编辑器,使其从左到右排列。
QKeyEvent event(QEvent::KeyPress, Qt::Key_Direction_L, 0);
qApp->sendEvent(ui->lineEdit, &event);

谢谢。我会尝试一下。但我认为它有限制,如果有更常见的方法来解决这个问题就太好了。 - waterd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接