在 QML 中创建一个矩形的副本
Create a copy of a rectangle in QML
我想制作一个区域,在点击的地方出现一个小矩形。稍后我会尝试添加通过拖动来移动这些矩形的功能。
学习帮助后,我尝试用 MouseArea
和包含 Rectangle
的 Component
来完成此操作。然后,使用 onClicked
,我试图创建一个 Component
的新副本,但无论我尝试什么都失败了(createComponent
、createObject
等)。
在这种情况下,创建对象副本的正确方法是什么?
我是否使用了正确的工具来实现这个目标?
MouseArea {
Component {
id: rect
Rectangle {
width: 10
height: 10
}
}
onClicked: < what? >
}
您可以使用 Qt.createQmlObject()
从 QML 字符串创建 QML 对象,并将其 x 和 y 值设置为 mouseX
和 mouseY
:
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});
}
我想制作一个区域,在点击的地方出现一个小矩形。稍后我会尝试添加通过拖动来移动这些矩形的功能。
学习帮助后,我尝试用 MouseArea
和包含 Rectangle
的 Component
来完成此操作。然后,使用 onClicked
,我试图创建一个 Component
的新副本,但无论我尝试什么都失败了(createComponent
、createObject
等)。
在这种情况下,创建对象副本的正确方法是什么? 我是否使用了正确的工具来实现这个目标?
MouseArea {
Component {
id: rect
Rectangle {
width: 10
height: 10
}
}
onClicked: < what? >
}
您可以使用 Qt.createQmlObject()
从 QML 字符串创建 QML 对象,并将其 x 和 y 值设置为 mouseX
和 mouseY
:
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});
}