在 QML 中创建一个矩形的副本

Create a copy of a rectangle in QML

我想制作一个区域,在点击的地方出现一个小矩形。稍后我会尝试添加通过拖动来移动这些矩形的功能。

学习帮助后,我尝试用 MouseArea 和包含 RectangleComponent 来完成此操作。然后,使用 onClicked,我试图创建一个 Component 的新副本,但无论我尝试什么都失败了(createComponentcreateObject 等)。

在这种情况下,创建对象副本的正确方法是什么? 我是否使用了正确的工具来实现这个目标?

MouseArea {
   Component {
      id: rect

      Rectangle {
         width: 10
         height: 10
      }
   }

   onClicked: < what? >
}

您可以使用 Qt.createQmlObject() 从 QML 字符串创建 QML 对象,并将其 x 和 y 值设置为 mouseXmouseY :

import QtQuick 2.3
import QtQuick.Window 2.0

Window {

    id : root

    visible: true
    width: 1000
    height: 500

    MouseArea {
        anchors.fill: parent

        onClicked:{
            var newObject = Qt.createQmlObject('import QtQuick 2.3; Rectangle {color: "red"; width: 10; height: 10}',
               root);

            newObject.x = mouseX;
            newObject.y = mouseY;
        }
    }
}

此外,如果您将矩形的代码放在单独的 qml 文件中,比如 myRect.qml,您可以通过以下方式从 qml 文件创建对象:

onClicked:{
     var component = Qt.createComponent("myRect.qml");
     var newObject = component.createObject(root, {"x": mouseX, "y": mouseY});
}