Как сделать так, чтобы символы языка с письмом справа налево (например, арабского) вели себя так же, как языки с письмом слева направо в qt?

Qt предоставляет мощный адаптивный способ работы с left-to-right языками и текстами на right-to-left языках. Но я сталкиваюсь со своими проблемами, связанными с моими целями.


Изображение №1. Что я хочу получить
image no.1


Изображение № 2. Что я получил, когда вставил в свой виджет на основе QTextEdit то, что показывает изображение № 1
изображение №2


Изображение № 3. Что я получил, когда установил направление текста слева направо, как показано ниже:

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

изображение №3

Making it left-to-right aligned is not that hard,
but the result differs from what picture no.1 shows.

Изображение №4. Что я получил, когда попытался добавить текст в терминал
  изображение №4


What I want to achieve is the fact that it shows like picture no.1 does,
and key-strikes make texts appended to the terminal
when the existting texts is terminated by a Arabic notation.
In a word,all I want is that it behave like left-to-right languages do
whether it contains right-to-left language characters or not.

person waterd    schedule 23.12.2014    source источник
comment
Если QT полностью поддерживает Unicode, вы можете попробовать специальный символ, называемый встраиванием слева направо: w3.org/International/questions/qa-bidi-controls   -  person VahidN    schedule 23.12.2014
comment
@VahidN Спасибо за вашу идею.   -  person waterd    schedule 23.12.2014
comment
Вы пытались отправить событие клавиатуры Qt::Key_Direction_L в свой виджет, чтобы узнать, поможет ли это. Вот так: 27518579" title="как отображать арабские обозначения слева направо в qlineedit qlabel e"> stackoverflow.com/questions/27517981/   -  person Nejat    schedule 23.12.2014


Ответы (1)


Unicode предоставляет Directional Formatting Characters, а Qt хорошо его поддерживает. Идея исходит от @VahidN. Моя проблема частично решена таким образом, теперь отображается строка двунаправления. сильный> правильно.

QString(QChar(0x200E))+strText; //LRM
QString(QChar(0x202D)) + strText + QString(QChar(0x202C)); //LRO...PDF

Перед этим вопросом я ответил еще один, который может помочь найти собственное решение.

person waterd    schedule 26.12.2014