[Interest] TableView focus proxying

Jb Hubert jb.hubert at dim3.com
Wed Dec 17 13:14:55 CET 2014


Hello,

I am trying go give active focus on a TextInput belonging to a
delegate item of a TableView.

Here is a minimal code for the delegate:

// MyClickableWidget.qml

import QtQuick 2.3

FocusScope {
    id: scope

    property alias text: label.text

    //FocusScope needs to bind to visual properties of the children
    property alias color: rectangle.color
    x: rectangle.x
    y: rectangle.y
    width: rectangle.width
    height: rectangle.height


    Rectangle {
        id: rectangle
        color: "lightsteelblue"
        width: 175
        height: 25
        radius: 10
        antialiasing: true
        border.color: "blue"

        TextInput { 
            id: label
            anchors.centerIn: parent
            focus: true
        }
    }

    MouseArea { 
        anchors.fill: parent
        onClicked: { scope.focus = true; } 
    }
}

So, my goal is to give active focus to label when the delegate is
clicked.

import QtQuick 2.3
import QtQuick.Controls 1.2

Rectangle {
    id: window

    width: 400
    height: 150


    ListModel {
        id: model
        ListElement {x: 42; y: 84}
        ListElement {x: 126; y: 168}
    }

    TableView {
        id: table
        anchors.fill: parent
        model: model
        focus: true

        itemDelegate: MyClickableWidget {
           color: "lightgreen"
           text: styleData.value
        }

        rowDelegate: Rectangle {
            height: 50
        }

        TableViewColumn {
            role: "x"
            width: 180
        }
        TableViewColumn {
            role: "y"
            width: 180
        }
    }   
}

When I run this example, I have to click two times on a delegate to
focus the internal label and I don't understand why. Using a ListView
instead of a TableView give me the expected behavior.

Am I missing something with the focus chain mechanism?

Jean-BenoƮt Hubert



More information about the Interest mailing list