这是用QML绘制图形项的最佳方式

Which is the best way for drawing graphics items with QML?

本文关键字:最佳 方式 图形 绘制 QML      更新时间:2023-10-16

在我的QML应用程序中,我需要常见的QGraphicsScene和QGraphicsObject可能性,如检测碰撞,"可移动"answers"可选择"标志,拖放等。我应该继承我的类从QQuickItem或使用QML画布?当然,我想编写更少的代码,并选择"xml方式"。

对于QML中的碰撞检测,您可以使用Box 2D QML插件。它有很多很好的功能,可以从这里下载。

你也可以自己实现碰撞检测。例如,检查如下:

Math.sqrt((ball1.x-ball2.x)*(ball1.x-ball2.x)+(ball1.y-ball2.y)*(ball1.y-ball2.y))<epsilon

要使QML项目可移动,可以这样做:

Image {
    id: icon
    width: 64
    height: 64
    source: "liverbird.gif"
    MouseArea {
        id: liverbirdMouseArea
        anchors.fill: parent
        property variant iconObj
        property int startX
        property int startY
        onPressed: {
            startX = mouseX
            startY = mouseY
            var iconComp = Qt.createComponent("icon.qml");
            iconObj = iconComp.createObject(parent);
            iconObj.x = mouseX - iconObj.width/2
            iconObj.y = mouseY - iconObj.height/2
        }
        onPositionChanged: {
            iconObj.x += mouseX - startX
            iconObj.y += mouseY - startY
            startX = mouseX
            startY = mouseY
        }
        onReleased: {
            iconObj.destroy()
        }
    }
}