Редактирование TextInput в ScrollView

У меня проблема с моим 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.

Спасибо.


person Pop    schedule 29.05.2015    source источник


Ответы (1)


Я думаю, это потому, что: «Только один элемент может быть прямым дочерним элементом ScrollView, и дочерний элемент неявно привязан для заполнения представления прокрутки»..

Из: http://doc.qt.io/qt-5/qml-qtquick-controls-scrollview.html

Возможно, дерево компонентов недоступно в ScrollView.

Но если вы используете:

ti1.forceActiveFocus();

вместо:

ti1.focus = true

оно работает.

person Herald Smit    schedule 29.05.2015