Как получить MouseArea.onPressAndHold как в ListViewItems, так и в пустой области ListView? - PullRequest
0 голосов
/ 15 февраля 2019

То, что я пытаюсь сделать, - это иметь возможность перехватывать MouseArea.onPressAndHold в ListViewItems ListView, а перехватывать MouseArea.onPressAndHold в ПУСТОЙ области ListView (то есть в области под listViewItems, которая еще не имеет элементов).Размер Listview равен размеру экрана, который оставляет «пустую» область под ListViewItems, где пользователь может нажать и удерживать, чтобы получить всплывающее меню для выбора добавления другого элемента.

Пожалуйста, см.3 различных области мыши, протестированных ниже (mouseTestArea1, mouseTestArea2, mouseTestArea3).Обратите внимание, что только один был протестирован за один раз.Я также сделал несколько тестов с различными объектами распространения: {true |false] и mouse.accepted = [false |true].

Моя проблема в том, что я могу либо обнаружить MouseArea.onPressAndHold в ListViewItem, либо в ListView, но не в обоих.Есть идеи, как этого добиться?ListViewItem MouseArea «должен» быть «ontop» для ListA MouseArea, и область, которая не имеет ListViewItem, должна затем быть покрыта ListView MouseArea.Но это не тот случай.Если я использую "mouseTestArea3", то эта MouseArea переходит к ListViewItems MouseArea.Так что я в растерянности.Есть несколько сообщений, похожих на этот, но не совсем одинаковых.Некоторые из них, которые я нашел, близки к этому вопросу, но не имеют ответов, которые сработают.

Любая помощь будет принята с благодарностью, поскольку я зашел в тупик, и я уверен, что что-то упустил.

Приведенный ниже код несколько упрощен, поскольку он очень большой.

Item {
    height: rectangleSwipeView.height
    width: rectangleSwipeView.width

    MouseArea {
        id: mouseTestArea1
        anchors.fill: parent
        propagateComposedEvents: true

        onPressAndHold: {
            console.log("*********** ListView onPressAndHold!");
            mouse.accepted = false;
        }
    }

    ListView 
    {
        id: deviceListView
        anchors.fill: parent                            
        model: _deviceManager.model
        orientation: Qt.Vertical

        MouseArea {
            id: mouseTestArea2
            anchors.fill: parent
            propagateComposedEvents: true

            onPressAndHold: {
                console.log("*********** ListView onPressAndHold!");
                mouse.accepted = false;
            }
        }

        delegate: Component 
        {
            id: listViewComponent

            Loader 
            {   
                id: viewLoader
                source: switch(model.device.technologytype) 
                {
                    case TechnologyType.Type1:
                        return "../../assets/ListViewItems/ListViewItem_DimmableDevice1.qml";
                    break;

                    case TechnologyType.Type2:
                        return "../../assets/ListViewItems/ListViewItem_DimmableDevice2.qml";
                    break;                          
                }
                asynchronous: true
                visible: status == Loader.Ready                 
            }
        }
    }

    MouseArea {
        id: mouseTestArea3
        anchors.fill: parent
        propagateComposedEvents: true

        onPressAndHold: {
            console.log("*********** ListView onPressAndHold!");
            mouse.accepted = false;
        }
    }
}   


//Example of Simplified ListViewItem ("ListViewItem_DimmableDevice1.qml"):

Item 
{
    id: root
    height: 65
    width: deviceListView.width 

    Item
    {       
        id: itemDeviceValue
        height: root.height
        width: root.height
        anchors.verticalCenter: parent.verticalCenter
        anchors.horizontalCenter: parent.horizontalCenter

        MouseArea {
            id: mouseAreaListViewItem
            anchors.fill: parent
            //propagateComposedEvents: true
            onPressAndHold: console.log("*********** ListViewItem onPressAndHold!");
        }
    }
}

Короче говоря, мне бы хотелось: mouseAreaListViewItem.onPressAndHold работать при длительном нажатии на этот элемент Item Box и mouseTestArea1, mouseTestArea2 ИЛИ mouseTestArea3 onPressAndHoldработать при длительном нажатии в «пустой» области в ListView, ниже ListViewItems.

...