在Qt的实现中,阿拉伯语符号显示在从右到左方向,因此任何包含阿拉伯语符号的字符串都将是右对齐的。
但我的应用程序要做的是显示从左到右方向的所有文本,无论它是否包含阿拉伯语符号。所有文本都是左对齐的。
示例如下所示:
将测试字符串粘贴到此处。 ە抠门哥ە(
提供替代解决方案。
最后,我可以使用QTextEdit
来QTextDocument
粗略地实现我的目标。以下代码段显示了我是如何做到的。但是我不知道Qt是如何从全球角度处理文本方向的,所以我无法用QLabel
等来实现我的目标... 如果有人可以提供有关Qt的详细信息,那就太棒了文本引擎。
QTextDocument *doc = ui->textEdit->document();
QTextOption textOption = doc->defaultTextOption();
textOption.setTextDirection(Qt::LeftToRight);
doc->setDefaultTextOption(textOption);
ui->textEdit->setDocument(doc);
答案 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);