В QML добавить pressAndHold к элементу, который уже обрабатывает нажатие?

Я хотел бы добавить обработчик pressAndHold для вкладок, созданных TabView. Если я прикреплю такой обработчик к компоненту, из которого TabView генерирует вкладку, то вкладка перестанет работать, потому что нажатие не попадает на базовую вкладку. Установка propagateComposedEvents не помогает, потому что нажатие не является составным событием. Я попытался запустить свою собственную систему pressAndHold с использованием таймера и обработки нажатия и отпускания, но это все равно не позволяет нажатому сигналу попасть на основную вкладку. Я попытался очистить mouse.accepted в своем обработчике печати, но тогда я не получаю сигнала об освобождении, потому что MouseArea предполагает, что меня это не заинтересует, если я не приму печать. Так что я в тупике.

Общий вопрос заключается в следующем: как вы отслеживаете все сигналы мыши с помощью MouseArea и, возможно, добавляете поведение, не препятствуя их прохождению к тому, что находится под ним? Более ограниченный вопрос: как добавить pressAndHold к чему-то, что уже обрабатывает нажатие и/или щелчок, но не обрабатывает pressAndHold, когда у вас нет доступа к базовому обработчику мыши?


person Paul DeRocco    schedule 18.01.2019    source источник


Ответы (1)


Надеюсь, что я правильно понимаю вашу проблему. Вы можете попробовать поместить TabView в MouseArea. В любом случае, это не лучшее решение.

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    MouseArea {
        anchors.fill: parent
        onPressAndHold: console.log("press")
        TabView {
            Tab {
                title: "Red"
                Rectangle { color: "red" }
            }
            Tab {
                title: "Blue"
                Rectangle { color: "blue" }
            }
            Tab {
                title: "Green"
                Rectangle { color: "green" }
            }
        }
    }
}
person Arman Oganesyan    schedule 18.01.2019