在Qt的实现中,阿拉伯语符号以从右到左的方向显示,因此任何包含阿拉伯语符号的字符串都将是右对齐的。
但我的应用程序想要做的是以左右方向显示所有文本,无论它是否包含阿拉伯语符号。所有文本都是左对齐的。
一个例子如下所示:
Paste the test string here. ە抠门哥ە(
提供替代解决方案。
最后,我可以通过使用QTextEdit
来实现我的目标,QTextDocument
有QLabel
。以下代码段显示了我是如何做到的。但我不知道Qt是如何从全球角度处理文本方向的,所以我无法用QTextDocument *doc = ui->textEdit->document();
QTextOption textOption = doc->defaultTextOption();
textOption.setTextDirection(Qt::LeftToRight);
doc->setDefaultTextOption(textOption);
ui->textEdit->setDocument(doc);
等实现我的目标......如果有人可以提供有关Qt文本引擎的详细信息,那将会很棒。
QLabel
Unicode提供了方向格式字符,Qt很好地支持它。
因此,对于QLineEdit
和LRM
等我们可以插入一个here控制字符
,在Unicode双向算法中定义,在RightToLeft字符串的开头,使字符串左对齐。有关Unicode双向算法的更多信息,请单击QString(QChar(0x200E))+strText;
。
QTextEdit
对于有QTextDocument
的QTextDocment
等,我们可以通过将textDirection
的Qt::LeftToRight
设置为QString
来使RightToLeft字符串左对齐。
PS:
isRightToLeft
有一个another one成员函数来决定字符串是否为RightToLeft。例如,以从右到左书写语言的符号开头的字符串是RightToLeft。
我回答了setLayoutDirection
,这可能有助于找到你自己的解决方案。
在关于QLineEdit
的Qt文档中,您可以阅读:
自Qt 4.7起,此方法不再影响文本布局方向。
所以你不能使用这种方法。对于Qt::Key_Direction_L
,如果字符是阿拉伯语或波斯语,您可以将QKeyEvent event(QEvent::KeyPress, Qt::Key_Direction_L, 0);
qApp->sendEvent(ui->lineEdit, &event);
键盘事件发送到行编辑以使其从左到右事件:
qazxswpoi