2015-02-08 62 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