qt position qml qt-quick

qt - Clear QML anchor



position qt-quick (2)

De acuerdo con los docs , la configuración de un atributo de anclaje a undefined debería funcionar. No entiendo bien por qué AnchorChanges no permitió establecer anchors.centerIn , pero puede solucionarlo en su función moveMouseArea :

function moveMouseArea(x, y) { mouseArea.anchors.centerIn = undefined; // <-- reset anchor before state change mouseArea.pos.x += x; mouseArea.pos.y += y; mouseArea.state = "moved"; mouseAreaPosText.text = ''Mouse area was moved... new pos: '' + mouseArea.pos.x + '', '' + mouseArea.pos.y; }

Tengo un MouseArea que quiero comenzar centrado y luego tener una posición absoluta una vez que se presionan las teclas arriba / abajo / izquierda / derecha. Mi problema es que no sé cómo borrar el ancla en MouseArea para poder especificar una posición absoluta:

import QtQuick 2.0 import QtQuick.Window 2.0 Window { id: screen width: 360 height: 360 visible: true Rectangle { anchors.fill: parent states: [ State { name: "moved" AnchorChanges { target: mouseArea anchors.bottom: undefined anchors.left: undefined anchors.right: undefined anchors.top: undefined } } ] MouseArea { id: mouseArea anchors.centerIn: parent width: 250 height: 250 focus: true onClicked: console.log("clicked!") onPositionChanged: console.log("position changed!") function moveMouseArea(x, y) { mouseArea.x += x; mouseArea.y += y; mouseArea.state = "moved"; mouseAreaPosText.text = ''Mouse area was moved... new pos: '' + mouseArea.x + '', '' + mouseArea.y; } Keys.onPressed: { if (event.key === Qt.Key_Up) moveMouseArea(0, -1); if (event.key === Qt.Key_Down) moveMouseArea(0, 1); if (event.key === Qt.Key_Left) moveMouseArea(-1, 0); if (event.key === Qt.Key_Right) moveMouseArea(1, 0); } Rectangle { anchors.fill: parent border.width: 2 border.color: "black" color: "transparent" } Text { id: mouseAreaPosText anchors.centerIn: parent } } } }

Al principio, solo intenté configurar mouseArea.anchors como undefined pero obtuve un error acerca de que los anchors son una propiedad de solo lectura. Luego descubrí AnchorChanges, pero no puedo encontrar una manera de eliminar / borrar el ancla; establecer anchors.bottom etc. en undefined no funciona.


gracias por su ayuda chicos. Descubrí que la configuración indefinida dentro de un estado funciona (si por obras solo quiere decir que no da errores), sin embargo, una vez que el elemento se mueve a otro estado, los anclajes regresan mágicamente (y muy frustrantemente). Esto sucede AÚN si establece todos los anclajes indefinidos en el estado final. Sin embargo, como se mencionó anteriormente, la configuración no definida en la función antes de cambiar el estado funciona muy bien. En mi caso, lo puse en mi mouseArea en onPressed.

onPressed: { plotWindow04Frame.anchors.bottom = undefined plotWindow04Frame.anchors.left = undefined plotWindow04Frame.state = "inDrag" }

Descubrí que no era necesario mencionar el ancla en onReleased, solo el siguiente estado. onReleased: {plotWindow04Frame.state = "dropeado"}

Además, debo mencionar que el estado final de "caída" tampoco menciona los anclajes, solo la opacidad.

states: [ State { name: "inDrag" PropertyChanges { target: plotWindow04Frame opacity: .5 } }, State { name: "dropped" PropertyChanges { target: plotWindow04Frame opacity: 1 } } ] transitions: Transition { NumberAnimation { properties: "opacity"; duration:200 } } }

(La idea aquí era que estas ventanas de la trama se volverían translúcidas (opacidad: 0.5) al arrastrar, pero volverían a opacas (opacidad: 1) cuando el usuario las suelta)

Lo que es bueno es que los "rectángulos" de la ventana de trama están inicialmente anclados en la parte inferior de la GUI, pero una vez que el usuario los recoge, pueden colocarlos donde quieran.