我创建了一个Rectangle项,其中Text项居中,它充当Edit框,并且在文本末尾带有Cursor项。
因此,为了使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位置。
答案 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;
}