Отключите перетаскивание вида, нажав и удерживая кнопку мыши во время перемещения курсора

Я хочу отключить перетаскивание моего списка, используя нажатие и удерживание кнопки мыши при перемещении курсора. Я пытаюсь реализовать некоторые другие функции, такие как множественный выбор с помощью этой команды. Я бы хотел, чтобы прокрутка была включена. Интерактивное свойство Flickable полностью отключает движение вида. Есть ли какое-то решение для этого?

1 ответ

Решение

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

Идея состоит в том, чтобы иметь MouseArea и установить interactive собственность на false когда сигналы onPressed а также onClicked испускаются. interactive должен быть установлен в true снова в onReleased обработчик.

import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

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

    ListModel {
        id: listModel
        ListElement {
            name: "ttt"
            number: "111"
        }
        ListElement {
            name: "rrr"
            number: "222"
        }
        ListElement {
            name: "sss"
            number: "333"
        }
        ListElement {
            name: "xxx"
            number: "444"
        }
        ListElement {
            name: "yyy"
            number: "555"
        }
        ListElement {
            name: "zzz"
            number: "666"
        }
        ListElement {
            name: "aaa"
            number: "777"
        }
        ListElement {
            name: "bbb"
            number: "888"
        }
        ListElement {
            name: "ccc"
            number: "999"
        }
        ListElement {
            name: "ddd"
            number: "011"
        }
        ListElement {
            name: "eee"
            number: "022"
        }
        ListElement {
            name: "fff"
            number: "033"
        }
    }

    ListView {
        id: myList
        width: 180; height: 100
        clip: true

        Component {
            id: contactsDelegate
            Rectangle {
                id: wrapper
                width: 180
                height: contactInfo.height
                color: "lightblue"

                Text {
                    id: contactInfo
                    text: name + ": " + number
                    color: "black"
                }

                MouseArea {
                    anchors.fill: parent
                    onPressed: {
                        myList.interactive = false
                        console.debug("onPressed")
                    }

                    onClicked:  {
                        myList.interactive = false
                        console.debug("onClicked")
                    }

                    onReleased: {
                        myList.interactive = true
                        console.debug("onReleased")
                    }
                }
            }
        }

        model: listModel
        delegate: contactsDelegate
        focus: true
    }
}
Другие вопросы по тегам