QtQuick2: обработка события onWheel внутри ScrollView

Мне нужно поместить компонент 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
                    }
                }
            }
        }
    }
}

person Evgeny Timoshenko    schedule 20.10.2013    source источник


Ответы (2)


Я нахожу способ решить это, но я не могу правильно объяснить это. :(

Этот документ иллюстрирует концепцию visual parent и object 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 }
            }
        }
    }  
}
person Qin Peixi    schedule 26.11.2013
comment
Спасибо за ответ - попробую как можно скорее. - person Evgeny Timoshenko; 26.11.2013
comment
в обработчике onWheel должно быть wheel.accepted = false, потому что обработка onWheel нарушает поведение ScrollView. - person Evgeny Timoshenko; 04.01.2014

На самом деле это ошибка в Qt:

Это решается в:

person vpicaver    schedule 02.05.2014