如何在QML中通过Drag and DropArea机制拖动项目的副本?

时间:2014-05-14 21:15:27

标签: qt drag-and-drop qml

你好下, 我在Windows上使用Qt 5.2.1 for Android

我已经完成了Qt提供的不同拖放示例,但没有解决我的问题,虽然我发现This Example通过拖放复制文本,但我想复制整个项目。

注意:我不想在应用程序内部进行外部复制。

谢谢

1 个答案:

答案 0 :(得分:1)

是一个noop,这只是一个想法,

  1. 创建一个新对象(与拖动的项目相同)
  2. 将“拖动的项目”属性复制到新创建的对象
  3. 销毁来源
  4. 让我们说你有和项目:

        // DraggedItem.qml
    import QtQuick 2.0
    Item {
        id:draggedItem
        property string itemText
        property string imageSource
        Image {
            id: img
            source: imageSource
        }
        Text {
            id: txt
            text: qsTr("text")
        }
    }   
    

    然后你就可以得到这样的掉落区域:

    import QtQuick 2.0
    Item {
    id:dropItem
    
    DropArea {
        id: dropArea
        anchors.fill: parent
    
        onDropped: {
            if (drop.source.parent !== draggedItem) {
    
                // Create new Item
                var newItem = createNewItem();
    
                // Copy the source item properties into the new one
                newItem.width = parent.width;
                newItem.height = drop.source.height;
                newItem.itemText = drop.source.itemText
                newItem.imageSource = drop.source.imageSource
    
                // destroy the source
                drop.source.destroy();
            }
    
        }
    
    }
    
    function createNewItem() {
        var component = Qt.createComponent("DraggedItem.qml");
        if (component.status === Component.Ready)
        {
            var newItem = component.createObject(parent, {"x":0,
                                                     "y":0});
            if (newItem === null)
                console.log("Error creating new Item");
    
        }
        return newItem
      } 
    }
    

    此代码未经过测试。应该有更好的方法来做到这一点