我在屏幕上有两个元素,一个Rectangle和一个TextInput。当在矩形上设置activefocus并输入任何内容时,我需要输入TextInput的输入
为此,我使用了curRect.Keys.forwardTo = [curTextbox];
它工作正常,但我也希望在焦点位于矩形上时看到光标。
http://qt-project.org/doc/qt-4.8/qml-textinput.html#cursorVisible-prop
在QT的上述链接中,它说
它可以直接在脚本中设置,例如KeyProxy 可能会将密钥转发给它,并且您希望它在此时看起来很活跃 发生了(但实际上没有给予主动关注)。
但在我的情况下,这不会发生。
任何人都可以向我解释为什么会这样,以及如何实现我的目标,即即使 activeFocus 在Rectangle上时显示光标?
即使在输入文本时显示光标,也会很棒。
更新
import QtQuick 1.0
FocusScope{
width: 400
height: 400
TextInput {Rectangle{anchors.fill: parent;color:"#66ff0000"}
id: mytext
anchors.top:parent.top
cursorVisible: true
width: rect.width
MouseArea{
anchors.fill: parent;
onClicked: mytext.forceActiveFocus()
}
Keys.onDownPressed: {
mytext2.forceActiveFocus();
}
}
TextInput {Rectangle{anchors.fill: parent;color:"#66ff0000"}
id: mytext2
anchors.top:mytext.bottom
cursorVisible: true
width: rect.width
MouseArea{
anchors.fill: parent;
onClicked: mytext2.forceActiveFocus()
}
Keys.onUpPressed: {
mytext.forceActiveFocus();
}
}
Rectangle {
id:rect
width: 360
height: 360
color:rect.activeFocus?"#6600ff00":"#660000ff"
focus: true
Keys.forwardTo: mytext
MouseArea{
anchors.fill: parent;
onClicked: rect.forceActiveFocus()
}
}
Component.onCompleted: rect.forceActiveFocus();
}
提前致谢。
答案 0 :(得分:2)
焦点更改会重置cursorVisible
属性...因此,当您点击rect
时,焦点会从mytext
通过forceActiveRecord
转移到mytext.cursorVisible
,{ {1}}自动设置为false。如果要保持光标可见,则应将其重置为true。这可以通过将rect.MouseArea.onClicked
更改为此来完成:
onClicked: {
rect.forceActiveFocus();
mytext.cursorVisible = true;
}
如果您希望mytext
上的光标始终可见,您还可以使用onCursorVisibleChanged
处理程序强制它为真。在mytext
对象中使用此内容:
onCursorVisibleChanged: {
if (!cursorVisible)
cursorVisible = true;
}
PS:我发布了一个新的答案,因为添加的细节已经改变了很多......我可能会删除之前的答案。