Как отображать арабские нотации в направлении слева направо в 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);