Qt基于Qml拖放功能实现

 演示效果

 设置被拖放对象

//文本拖放测试
    Text{
        id: sourceLabel
        anchors.left: parent.left
        anchors.leftMargin: 120
        anchors.verticalCenter: parent.verticalCenter
        text: qsTr("文字内容拖放测试")

        Drag.active: dragArea.drag.active;//拖放激活
        Drag.supportedActions: Qt.CopyAction;//拖放动作-复制内容
        Drag.dragType: Drag.Automatic;//拖放类型
        Drag.mimeData: {"text": text};//拖放数据类型-文本
        //鼠标区域
        MouseArea {
            id: dragArea;
            anchors.fill: parent;
            drag.target: parent;
        }
    }

设置接受拖放对象

TextEdit{
            id: targetEdit
            height: parent.height-2
            width: parent.width-2
            anchors.centerIn: parent
            text: qsTr("")
            //拖放区域
            DropArea {
                id: dropContainer
                anchors.fill: parent;
                //接受拖放处理
                onDropped: {
                    if (drop.supportedActions == Qt.CopyAction){
                        targetEdit.text = drop.getDataAsString("text") //赋值拖放文本给新文本对象
                    }
                }
            }
        }

完整qml源码

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12

ApplicationWindow {
    visible: true
    width: 400
    height: 300
    title: qsTr("Qt基于Qml拖放功能实现")

    //文本拖放测试
    Text{
        id: sourceLabel
        anchors.left: parent.left
        anchors.leftMargin: 120
        anchors.verticalCenter: parent.verticalCenter
        text: qsTr("文字内容拖放测试")

        Drag.active: dragArea.drag.active;//拖放激活
        Drag.supportedActions: Qt.CopyAction;//拖放动作-复制内容
        Drag.dragType: Drag.Automatic;//拖放类型
        Drag.mimeData: {"text": text};//拖放数据类型-文本
        //鼠标区域
        MouseArea {
            id: dragArea;
            anchors.fill: parent;
            drag.target: parent;
        }
    }

    Rectangle{
        anchors.left: sourceLabel.left
        anchors.top: sourceLabel.bottom
        anchors.topMargin: 20
        border.color: "#AAAAAA"
        border.width: 1
        height: 25
        width: 100

        TextEdit{
            id: targetEdit
            height: parent.height-2
            width: parent.width-2
            anchors.centerIn: parent
            text: qsTr("")
            //拖放区域
            DropArea {
                id: dropContainer
                anchors.fill: parent;
                //接受拖放处理
                onDropped: {
                    if (drop.supportedActions == Qt.CopyAction){
                        targetEdit.text = drop.getDataAsString("text") //赋值拖放文本给新文本对象
                    }
                }
            }
        }
    }

    //图像拖放测试
    Image{
        id: sourceImage
        height: 36
        width: 36
        anchors.right: parent.right
        anchors.rightMargin: 120
        anchors.verticalCenter: parent.verticalCenter
        source: "qrc:/Face.png"

        Drag.active: dragArea1.drag.active;//拖放激活
        Drag.supportedActions: Qt.CopyAction;//拖放动作-复制内容
        Drag.dragType: Drag.Automatic;//拖放类型
        Drag.mimeData: {"pic": source};//拖放数据类型-图像
        //鼠标区域
        MouseArea {
            id: dragArea1;
            anchors.fill: parent;
            drag.target: parent;
        }
    }

    Rectangle{
        anchors.left: sourceImage.left
        anchors.top: sourceLabel.bottom
        anchors.topMargin: 20
        border.color: "#AAAAAA"
        border.width: 1
        height: 36
        width: 36

        Image{
            id: targetImage
            height: parent.height-2
            width: parent.width-2
            anchors.centerIn: parent
            //拖放区域
            DropArea {
                id: dropContainer1
                anchors.fill: parent;
                //接受拖放处理
                onDropped: {
                    if (drop.supportedActions == Qt.CopyAction){
                        targetImage.source = drop.getDataAsString("pic") //赋值拖放图像路径给新图像对象
                    }
                }
            }
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林鸿群

有你的鼓励,我会更加努力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值