【问题标题】:Can QML StackLayout detect drag from a component outside itselfQML StackLayout 可以检测到来自自身外部组件的拖动吗
【发布时间】:2021-01-31 14:21:43
【问题描述】:

我有一个 StackLayout,其中包含 3 个堆栈项(2 个静态生成,一个动态生成),可以打开按钮单击。我想将第二个和第三个堆栈项设为Droparea(第三个是动态创建的),我想从 StackLayout 之外的Listview 中拖动项目。有可能还是我做错了什么?

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15

Page{
    id: pageid
    width: parent.width
    height: parent.height

    Row{
        id: row1

        Button{
            text: "0"
            onClicked: layout.currentIndex = 0
        }
        Button{
            text: "1"
            onClicked: layout.currentIndex = 1
        }
        Button{
            text: "2"
            onClicked:{
                var str = 'import QtQuick 2.15; Rectangle {id: rect2; color: "red"; DropArea{anchors.fill: parent; onEntered: {rect2.color = "silver"}}}'
                var comp = Qt.createQmlObject(str,layout,"dynamicSnippet1")
                onClicked: layout.currentIndex = 2
            }
        }
    }

    // Stacklayout block
    StackLayout {
        id: layout
        anchors.top: row1.bottom
        height: parent.height - row1.height - dragger.height
        width: parent.width
        currentIndex: 0

        // Component 0
        Rectangle {
            id: rect0
            color: 'teal'
        }

        // Component 1
        Rectangle {
            id:rect1
            color: 'plum'

            DropArea{
                anchors.fill: parent
                onEntered: {rect1.color = "gold"}

            }
        }
    }



    // Drag rectangles
    ListView{
        id: dragger
        anchors.top: layout.bottom
        height: 30
        width: parent.width
        orientation: Qt.Horizontal
        model: 3
        delegate:  Rectangle{
            id: xrect
            height: 30
            width: 60
            color:"grey"
            border.width: 1
            border.color: "orange"

            MouseArea{
                id: ma
                anchors.fill: parent
                onReleased: parent.Drag.drop()
                drag.target: parent

            }
        }
    }
}

【问题讨论】:

  • 你试过了吗?您遇到了哪些错误/意外行为?
  • @folibis,什么都没有。堆栈项未检测到拖动事件。上面提到了我的确切代码(没有任何其他依赖项)

标签: qt qml


【解决方案1】:

您忘记为您的可拖动目标设置属性Drag.active,例如放置语句

Drag.active: ma.drag.active

进入您的xrect 以使其正常工作。

此外,您可以在DropArea 中查看更多拖动信号:

onDropped: console.error("# dropped")
onContainsDragChanged: console.error("# containsDrag", containsDrag)

【讨论】:

    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    相关资源
    最近更新 更多