Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 用于鼠标选择的具有负宽度的QML矩形_Qt_Qml - Fatal编程技术网

Qt 用于鼠标选择的具有负宽度的QML矩形

Qt 用于鼠标选择的具有负宽度的QML矩形,qt,qml,Qt,Qml,我正在尝试制作一个鼠标选择矩形 但是矩形{}对象不能有负的宽度和高度值 因此,它只选择从左到右和从上到下的: Rectangle { id: selectorRectangle x: 0 y: 0 width: 0 height: 0 color: "#8000abcd" border.color: "#00fbfb" } MouseArea { anchors.fill: parent propagateCompose

我正在尝试制作一个鼠标选择矩形

但是
矩形{}
对象不能有负的宽度和高度值

因此,它只选择从左到右和从上到下的

Rectangle {
    id: selectorRectangle
    x: 0
    y: 0
    width: 0
    height: 0
    color: "#8000abcd"
    border.color: "#00fbfb"
}


MouseArea {
    anchors.fill: parent
    propagateComposedEvents: true

    onPressed: {
        selectorRectangle.x = mouse.x
        selectorRectangle.y = mouse.y
    }

    onPositionChanged: {
        selectorRectangle.width = mouse.x - selectorRectangle.x
        selectorRectangle.height = mouse.y - selectorRectangle.y
    }
}

我怎样才能做到呢


谢谢

这是我的实现。您只需要将按下的点保留在属性中,并相应地计算x、y、width和height,以保持width和height为正

Rectangle {
            id: selectorRectangle
            x: 0
            y: 0
            width: 0
            height: 0
            color: "#8000abcd"
            border.color: "#00fbfb"
        }

        MouseArea {
            anchors.fill: parent
            propagateComposedEvents: true
            property var lastPressPoint: Qt.point(0,0)

            onPressed: {
                lastPressPoint.x = mouse.x;
                lastPressPoint.y = mouse.y;
            }

            onPositionChanged: {
                selectorRectangle.x = Math.min(lastPressPoint.x , mouse.x)
                selectorRectangle.y = Math.min(lastPressPoint.y , mouse.y)
                selectorRectangle.width = Math.abs(lastPressPoint.x - mouse.x);
                selectorRectangle.height =  Math.abs(lastPressPoint.y - mouse.y);
            }
            onReleased: {
                 selectorRectangle.x = 0;
                selectorRectangle.y = 0;
                selectorRectangle.width = 0;
                selectorRectangle.height = 0;
            }
        }