Как отображать арабские нотации в направлении слева направо в QLineEdit/QLabel и т. Д.?

В реализации Qt arabic notations показано в right-to-left направление, таким образом, любые строки, которые содержат arabic notations будет right-alignment,

Но мое приложение хочет показать все тексты в left-to-right направление, содержит ли оно arabic notations или нет. И все тексты есть left-alignment,

Пример показан ниже:
То, как показано первое изображение, - это то, что я хочу реализовать. Второе изображение показывает, как QLineEdit отображать тексты, содержащие arabic notations по умолчанию, а третий показывает, как QLabel сделай это.

первое изображение

второе изображение

третье изображение

РЕДАКТИРОВАТЬ:
Вставьте тестовую строку сюда. ە抠门哥ە(

РЕДАКТИРОВАТЬ: Предоставление решения изменить.
Наконец я могу достичь своей цели примерно с помощью QTextEdit который имеет QTextDocument Следующий фрагмент кода показывает, как я это сделал. Но я понятия не имею, как Qt справляется с направлением текста с глобальной точки зрения, поэтому я не могу достичь своей цели с помощью QLabel и т.д. Это не может быть лучше, если кто-то может дать некоторую подробную информацию о Qt's text engine ,

QTextDocument * doc = ui-> textEdit-> document ();
QTextOption textOption = doc-> defaultTextOption ();
textOption.setTextDirection (Qt:: LeftToRight);
doc-> setDefaultTextOption (textOption);
ui-> textEdit-> setDocument (док);

2 ответа

Решение

Unicode предоставляет символы направленного форматирования, и Qt хорошо его поддерживает.

Таким образом, для QLabel а также QLineEdit и т.д. мы можем вставить LRM управляющий персонаж
, который определяется в двунаправленном алгоритме Unicode, в начале строки RightToLeft для выравнивания строки по левому краю. Для получения дополнительной информации о двунаправленном алгоритме Unicode нажмите здесь.

QString(QChar(0x200E))+strText;

И для QTextEdit и т.д., который имеет QTextDocument мы можем сделать выравнивание RightToLeft по левому краю, установив QTextDocment "s textDirection в Qt::LeftToRight,

пс:
QString имеет isRightToLeft функция-член, чтобы решить, является ли строка RightToLeft или нет. Например, строка, которая начинается с записи на языке письма справа налево, называется RightToLeft.

Я ответил на другой, который может быть полезным для поиска вашего собственного решения.

В Qt документация о setLayoutDirection ты можешь читать:

Этот метод больше не влияет на направление размещения текста, начиная с Qt 4.7.

Поэтому вы не можете использовать этот метод. За QLineEdit Вы можете отправить Qt::Key_Direction_L Событие клавиатуры для редактирования строки, чтобы сделать его слева направо, если символы арабские или персидские:

QKeyEvent event(QEvent::KeyPress, Qt::Key_Direction_L, 0);
qApp->sendEvent(ui->lineEdit, &event);
Другие вопросы по тегам