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

时间:2014-12-17 03:45:09

标签: 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);

2 个答案:

答案 0 :(得分:4)

Unicode提供定向格式字符,Qt支持它。

因此,对于 QLabel QLineEdit 等,我们可以插入 LRM 控件性格
 ,在 RightToLeft 字符串的开头,在 RightToLeft 字符串中定义,以使字符串左对齐。有关<的更多信息,请执行以下操作: strong> Unicode双向算法,单击here

QString(QChar(0x200E))+strText;

对于 QTextEdit QTextDocument ,我们可以将 RightToLeft 字符串留下-alignment ,将 QTextDocment textDirection设置为 Qt::LeftToRight

PS:
QString isRightToLeft 成员函数来判断字符串是否为 RightToLeft 。例如,以从右到左写入语言的符号开头的字符串为 RightToLeft

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

答案 1 :(得分:1)

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

  

自Qt 4.7以来,此方法不再影响文本布局方向。

所以你不能使用这种方法。对于QLineEdit,如果字符为阿拉伯语或波斯语,您可以向行编辑发送Qt::Key_Direction_L键盘事件,使其从左到右发生:

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