Как проверить автоматическое выравнивание текста, когда текст содержит арабские слова - PullRequest
0 голосов
/ 18 марта 2019

Я создал элемент Rectangle с элементом Text в центре, который действует как поле редактирования с элементом Cursor в конце текста.

SAMPLE iMAGE

Поэтому, чтобы QML позаботилась об ориентации, я изменил элемент Text как

Text
    {
        id: text_input
        font.bold: true
        font.pixelSize: 22
        color: "white"
        text:  view.defaultTextField
        elide: Text.ElideLeft
        verticalAlignment: Text.AlignVCenter
        anchors.fill: parent
        maximumLineCount: 1

        clip: true

        anchors{
            rightMargin: 10
            leftMargin: (textInputField === "") ? 18 : 12
            verticalCenter: parent.verticalCenter
        }
    }

, а изображение курсора как

Image
    {
        id: img_cursor

        x: (textInputField !== "") ?
              (text_input.x + text_input.contentWidth)) : 12

        anchors.verticalCenter: parent.verticalCenter
        source: "text_cursor.png"
    }

Теперь, если textInputField содержит арабский текст, TextItem является автоматическим изменениемориентация справа налево.и английский это меняется, чтобы начать слева.Добавляется текст: арабский язык: влево <- вправо <br>английский: влево -> вправо

Но для позиции курсора, как я могу сделать логику для автоматического обнаружения и изменения позиции курсора хв зависимости от направления ориентации text_input (арабский и английский).

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Арабский не всегда RtoL.Числа, например, пишутся LtoR (как на английском языке).Также иностранные слова будут написаны LtoR.И наоборот, если вы добавите арабское слово в текст на английском языке, направление текста где-то изменится.Может быть серединой строки, может быть на любом конце.

Вот почему простой трюк, такой как вызов QFontMetrics.width (), будет работать только для простых случаев.

Попробуйте QTextLayout вместо.QLineEdit использует этот код в своем элементе управления для определения положения курсора по X:

qreal cursorToX(int cursor) const { return m_textLayout.lineAt(0).cursorToX(cursor); }
0 голосов
/ 26 марта 2019

Я создал функцию для проверки выравнивания текста. поэтому при изменении арабского языка ориентация текста будет изменена автоматически.

function isArabicAlignment() {

        if(text_input.horizontalAlignment === Text.AlignRight)
            return true;
        else
            return false;
    }

Итак, ввод текста изменяется, я проверю состояние и обновлю позицию курсора.

x: (textInputField !== "" && isArabicAlignment()) ?
              (text_input.x + text_input.contentWidth)) : //Changing Cursor in reverse.
...