如何在QML中禁用ListView的第一个项目的拖放

时间:2017-04-10 12:18:44

标签: qt drag-and-drop qml qtquick2

我有一个QML项目,我可以拖动&删除ListView中的矩形。 我想禁用 ListView第一个项目(矩形)的拖放功能。

以下是一个例子:

Rectangle {
    visible: true
    width: 1000; height: 1000
    ListView {
        id: root
        width: parent.width; height: parent.height

        model: DelegateModel {

            id: visualModel
            model: myModel
            model: ListModel {
                id: colorModel
                ListElement { someData }
                ...

            }

            delegate: MouseArea {

                property int visualIndex: DelegateModel.itemsIndex

                id: delegateRoot
                cursorShape: Qt.PointingHandCursor
                width: root.width; height: 100
                drag.target: icon
                drag.axis: Drag.YAxis
                drag.minimumY: 0
                property bool current: false

                Rectangle {
                  blablaData

                 //Something like : if firstItem, disable drag&drop
                }

                onClicked: {
                    delegateRoot.current = !delegateRoot.current;
                    if(current) {
                        delegateRoot.height = 300
                    }
                    else {
                        delegateRoot.height = 100
                    }
                }

                Rectangle {
                   id: container
                   anchors.top: icon.bottom
                   width: root.width-5
                   height: delegateRoot.height - icon.height
                   clip: true
                   border.color: "#81BEF7"
                   Behavior on implicitHeight {
                       PropertyAnimation { duration: 100 }
                   }
                   Text {
                       anchors.fill: parent
                       anchors.margins: 10
                       horizontalAlignment: Text.AlignLeft
                       verticalAlignment: Text.AlignVCenter
                       text: size
                   }
                 }

                DropArea {
                    anchors { fill: parent; margins: 15 }

                    onEntered: {                   
                          visualModel.items.move(drag.source.visualIndex, delegateRoot.visualIndex)               
                    }
                 }
             }
          }
    }
}

你知道怎么做吗? 非常感谢!

编辑:为我的示例添加了一些功能

2 个答案:

答案 0 :(得分:2)

在委托根项目中,尝试:

enabled: index ? true : false

答案 1 :(得分:1)

我找到了一种简单的方法,你可以将它用于你想要的项目(不仅仅是第一个)。

我需要在drag.axis中更改delegateRootisDraggable,方法是在每个true上设置falsedrag.target: isDraggable ? content : undefined drag.axis: isDraggable ? Drag.YAxis : Drag.None <a href="data.php?id=<?php echo $USER_ID;?>"></a> 之类的布尔值item然后像这样使用它:

<?php
$USER_ID = htmlspecialchars($_GET["id"])
//SQL Request to get user priviledge and authentificate
//OR
//Check the cookie session for information
if (user_priviledge == 0)
{
//
//Show only data for 0 users
//
}elseif (user_priviledge == 1) {
//
//Show only data for 1 users
//
}
?>