How to get Clicked or Pressed event on QML TableView header?

空扰寡人 提交于 2019-12-25 00:23:05

问题


I I´m trying get the click or press event on QML TableView Header.

I have tried on HeaderDelegate create a MouseArea with width, height and anchors.fill from the parent, and get the onClicked or onPressed events, but don´t work.

Example:

MouseArea {
    width: parent.width
    height: parent.height
    anchors.fill: parent

    onClicked: {
        console.debug("CLICKED: "+styleData.pressed)
        console.debug("COLUMN:  "+ styleData.column)
    }

    onPressed: {
        console.debug("PRESSED: "+styleData.pressed)
        console.debug("COLUMN:  "+ styleData.column)
    }
}

that doesn't log anything

I also tried use "Connections" on HeaderDelegate, with "target: styleData" and "onPressedChanged"event, and worked, but the "onPressedChanged" get 4 changes in the same time. Example:

Connections {
    target: styleData
    onPressedChanged: {
        console.debug("PRESSED: "+ styleData.pressed)
        console.debug("COLUMN:  "+ styleData.column)
    }
}

Return:

qml: PRESSED: true 
qml: COLUMN:  0 
qml: PRESSED: true 
qml: COLUMN:  0 
qml: PRESSED: false 
qml: COLUMN:  0 
qml: PRESSED: false 
qml: COLUMN:  0 

The whole code from TableView:

TableView  {
    id: tViewEnt
    width: parent.width
    height: parent.height
    anchors.verticalCenter: parent.verticalCenter
    anchors.horizontalCenter: parent.horizontalCenter
    verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff
    horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff


    TableViewColumn {
        id: column0
        title: "column0"
        width: 30

        delegate: CheckBox {
            style: CheckBoxStyle {
                indicator: Rectangle {
                    //INDICATOR PROPERTIES
                }
            }
        }
    }
    TableViewColumn {
        title: "column1"
        role: "column1"
    }
    TableViewColumn {
        title: "column2"
        role: "column2"
    }


    headerDelegate: Rectangle {
        height: tViewEnt.height / 15
        color: styleData.column===0 ? "#4D4D4D" : "#0077B3"

        Rectangle {
            anchors.right: parent.right
            anchors.top: parent.top
            anchors.bottom: parent.bottom
            anchors.bottomMargin: 1
            anchors.topMargin: 1
            width: 1
            color: "#333"
        }
        Text {
            text: styleData.value
            color: "#CFF"
            width: parent.width
            height: parent.height
            font.pointSize: 18
            minimumPointSize: 3
            fontSizeMode: Text.Fit
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter
        }

        Connections {
            target: styleData
            onPressedChanged: {
                console.debug("PRESSED: "+ styleData.pressed)
                console.debug("COLUMN:  "+ styleData.column)
            }
        }
    }
}

So, How do i get the Header Delegate click or pressed event in the right way?

来源:https://stackoverflow.com/questions/50418541/how-to-get-clicked-or-pressed-event-on-qml-tableview-header

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!