当文本包含阿拉伯语单词时如何检查文本的自动对齐

时间:2019-03-18 08:43:33

标签: qt qml arabic-support

我创建了一个Rectangle项,其中Text项居中,它充当Edit框,并且在文本末尾带有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会自动从右向左更改方向。和英语,它正在改变,从左起。 文本追加进来: 阿拉伯语:左<-右
英语:左->右

但是对于“光标位置”,我如何使逻辑能够基于text_input方向(阿拉伯语和英语)自动检测和更改光标的x位置。

2 个答案:

答案 0 :(得分:1)

阿拉伯语并非总是 RtoL。例如,数字写为LtoR(就像英文一样)。同样,外来词将被写成LtoR。相反,如果在英语文本中添加阿拉伯语单词,则文本方向将在某处更改。可能在该行的中间,可能在任一端。

这就是为什么像调用QFontMetrics.width()这样的简单技巧仅适用于简单情况的原因。

改为尝试QTextLayout。 QLineEdit在控件中使用以下代码来找出光标的X位置:

qreal cursorToX(int cursor) const { return m_textLayout.lineAt(0).cursorToX(cursor); }

答案 1 :(得分:0)

我创建了一个函数来检查文本的对齐方式。如此阿拉伯文更改,文本方向将自动修改。

insert into People (playerID, Total_HR)
select Batting.playerID, sum(Batting.HR)
from Batting
left join People on People.playerID = Batting.playerID
where People.playerID is null and Batting.playerID is not null
group by playerID

因此,在“文本输入”被修改后,我将检查条件并更新光标位置。

function isArabicAlignment() {

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