QtQuick2:处理ScrollView中的onWheel事件

时间:2013-10-20 16:30:15

标签: qt qml qtquick2

我必须将组件X放在ScrollView中。组件X必须处理鼠标滚轮事件,但ScrollView会处理它。因此,以下示例(简化)不起作用。

如何让Rectangle的鼠标区域处理OnWheel事件?

import QtQuick 2.1
import QtQuick.Controls 1.0
import QtQuick.Window 2.0
import QtQuick.Layouts 1.0

ApplicationWindow {
    width: 640
    height: 480

    ScrollView {
        height: 100
        width: 100

        ColumnLayout{
            Rectangle {
                color: "red"
                width: 50
                height: 50
                MouseArea {
                    anchors.fill: parent
                    onWheel: {
                        console.log("onWheel"); // it doesn't work
                    }
                    onClicked: {
                        console.log("onClicked"); // it works
                    }
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

我找到了解决问题的方法,但我无法正确解释。 :(

This document说明了visual parentobject parent的概念,但它并没有说明它们如何影响事件传播。

希望有人能给出明确的解释。

ApplicationWindow {
    width: 640
    height: 480

    ScrollView {
        id: scroll   // add an id
        height: 100
        width: 100

        ColumnLayout{
            Rectangle {
                id: rect   // add an id
                color: "red"
                width: 50
                height: 50
                MouseArea {
                    parent: scroll      // specify the `visual parent`
                    anchors.fill: rect       // fill `object parent` 
                    onWheel: {
                        console.log("onWheel"); // now it works
                    }
                    onClicked: {
                        console.log("onClicked"); // it works
                    }
                }
            }
            Repeater {
                model: 30
                Text{ text: index }
            }
        }
    }  
}