在ScrollView中编辑TextInput

时间:2015-05-29 07:49:41

标签: qt scrollview qml qtquick2 qtquickcontrols

我的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相同。

感谢。

1 个答案:

答案 0 :(得分:3)

我认为这是因为: “只有一个项目可以是ScrollView的直接子项,并且子项被隐式锚定以填充滚动视图。”

来自:http://doc.qt.io/qt-5/qml-qtquick-controls-scrollview.html

可能ScrollView中的组件树不可用。

但是如果你使用:

ti1.forceActiveFocus();

而不是:

ti1.focus = true

它有效。