2015-02-08 76 views
2

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

学习帮助后,我试图用MouseAreaComponent包含Rectangle来完成此操作。然后,与onClicked,我试图创建一个Component的新副本,但我尝试了任何我试过的(createComponentcreateObject等)。

在这种情况下创建对象的副本的正确方法是什么? 我是否正在为此目标使用正确的工具?

MouseArea { 
    Component { 
     id: rect 

     Rectangle { 
     width: 10 
     height: 10 
     } 
    } 

    onClicked: <what?> 
} 

回答

0

你可以从QML的字符串使用Qt.createQmlObject()创建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}); 
} 
+0

非常感谢!我试图将所有文件保存在一个文件中,因此我首选解决方案。我试过类似的东西,但它太复杂了var newObject = Qt.createQmlObject('import QtQuick 2.3; Rectangle {width:10; height:10,x:'+ mouseX +',y:'+ mouseY +'}',parent); – 2015-02-08 14:08:57

+1

Milos,尝试使用“arg()”函数而不是直接级联,它更方便。 – QtRoS 2015-02-10 07:45:04