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

问题描述 投票:2回答:2

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

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

一个例子如下所示:

  • 这就是我想要实现的 what I want to implement
  • 这就是QLineEdit以默认方式显示包含阿拉伯语符号的文本的方式 arabic notation in QLineEdit
  • 这就是QLabel如何做到的 arabic notation in QLabel

EDIT:

Paste the test string here. ە抠门哥ە(

EDIT:

提供替代解决方案。

最后,我可以通过使用QTextEdit来实现我的目标,QTextDocumentQLabel。以下代码段显示了我是如何做到的。但我不知道Qt是如何从全球角度处理文本方向的,所以我无法用QTextDocument *doc = ui->textEdit->document(); QTextOption textOption = doc->defaultTextOption(); textOption.setTextDirection(Qt::LeftToRight); doc->setDefaultTextOption(textOption); ui->textEdit->setDocument(doc); 等实现我的目标......如果有人可以提供有关Qt文本引擎的详细信息,那将会很棒。

QLabel
qt arabic text-alignment qlineedit qlabel
2个回答
4
投票

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

因此,对于QLineEditLRM等我们可以插入一个here控制字符 ,在Unicode双向算法中定义,在RightToLeft字符串的开头,使字符串左对齐。有关Unicode双向算法的更多信息,请单击QString(QChar(0x200E))+strText;

QTextEdit

对于有QTextDocumentQTextDocment等,我们可以通过将textDirectionQt::LeftToRight设置为QString来使RightToLeft字符串左对齐。

PS: isRightToLeft有一个another one成员函数来决定字符串是否为RightToLeft。例如,以从右到左书写语言的符​​号开头的字符串是RightToLeft。

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


1
投票

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

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

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

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.