Qt QML | Làm sao để chỉ cho phép Drag item sau khi giữ long press (Drag Drop after long press)

MỤC LỤC:
QML cách chỉ cho phép Drag item sau khi giữ long press

Với lập trình giao diện dựa trên công nghệ của Qt QML, ở bài viết trước đây, chúng ta đã biết cách drag drop để thay đổi vị trí item trong list view, ở bài này sẽ là triển khai của một yêu cầu khác liên quan mật thiết.

Giả sử chúng ta cần thực hiện tính năng, chỉ chop phép drag drop sau khi press and hold trong Qt QML. 


import QtQuick 2.4
import QtQuick.Controls 1.3

ApplicationWindow {
    width: 300
    height: 300
    visible: true

    Rectangle {
        id: item
        border.width: 2
        x: 100
        y: 100
        width: 100
        height: 100

        MouseArea {
            id: mouseArea
            anchors.fill: parent
            drag{
                // target:  NOT SET HERE
                minimumX: 0
                minimumY: 0
                maximumX: parent.parent.width - parent.width
                maximumY: parent.parent.height - parent.height
                smoothed: true
            }
            
            state: "BASE"
            states: [
                  State {
                      name: "BASE"
                      PropertyChanges { target: mouseArea; drag.target: undefined}
                      PropertyChanges { target: item; color: "steelblue"}
                  },
                  State {
                      name: "DRAGGABLE"
                      PropertyChanges { target: mouseArea; drag.target: item}
                      PropertyChanges { target: item; color: "darkblue"}
                  }
            ]


            onPressAndHold: {
                mouseArea.state = "DRAGGABLE"
                mouse.accepted = false      // mouse event is USED but NOT CONSUMED...
            }

            onReleased: {
                mouseArea.state = "BASE"         // mouse event acceptation occurs here!
            }
        }
    }
}


TuanTiTien

Author:

Tôi là Tuấn Anh, một lập trình viên C++, hiện tại đang làm việc với Qt Framework. Giờ đã là bố của một thanh niên nhỏ, gần đây tôi thấy mình cần sống có trách nhiệm hơn nữa. : ]] Tôi cảm thấy nếu tôi không có nơi nào đó để ghi lại, tôi sẽ quên mất nhiều thứ. Dấu chân trên cát cũng vậy, nếu ta không chụp ảnh nó lại, rồi nó cũng sẽ bị gió làm mờ đi dần rồi mất hút hẳn. Cảm ơn anh em đã ghé qua và đọc những gì tôi viết. Hữu duyên thiên lý Ngô tương nặng, à nhầm Năng tương ngộ. : ]] Thân ái 3000!
© Giao diện website thiết kế bởi TuanTiTien.com