我的QML存在问题。我想根据操作修改TextInput
,将focus
属性设置为true
。它适用于TextInput
位于Rectangle
但不在ScrollView
的情况。
这是一个例子:
Item {
id: main
width: 640
height: 480
ScrollView{
id: scrollView
height: parent.height/2
width: parent.width
Rectangle{
border.color: "black"
border.width: 1
anchors.centerIn: parent
height: 25
width: 200
TextInput{
id: ti1
anchors.fill: parent
verticalAlignment: TextInput.AlignVCenter
horizontalAlignment: TextInput.AlignHCenter
}
}
}
Rectangle{
y: height
height: parent.height/2
width: parent.width
Rectangle{
border.color: "black"
border.width: 1
anchors.centerIn: parent
height: 25
width: 200
TextInput{
id: ti2
anchors.fill: parent
verticalAlignment: TextInput.AlignVCenter
horizontalAlignment: TextInput.AlignHCenter
}
}
}
MouseArea{
anchors.fill: parent
onClicked: {
if (mouseY < parent.height/2){
ti2.focus = false
ti1.focus = true
}else{
ti1.focus = false
ti2.focus = true
}
}
}
}
当我点击窗口的下半部分时,TextInput
ti2是可编辑的。但是当我点击上半部分时,ti1不是。
有人有任何想法吗?行为与TextEdit
相同。
感谢。
答案 0 :(得分:3)
我认为这是因为: “只有一个项目可以是ScrollView的直接子项,并且子项被隐式锚定以填充滚动视图。”。
来自:http://doc.qt.io/qt-5/qml-qtquick-controls-scrollview.html
可能ScrollView中的组件树不可用。
但是如果你使用:
ti1.forceActiveFocus();
而不是:
ti1.focus = true
它有效。