2016-08-30 1 views
1

J'ai un curseur et une image utilisée pour glisser sur le curseur comme indiqué ci-dessous.Impossible d'annuler le glisser lorsque nous quittons la zone de la souris

Image 
{ 
    id: slideImg 
    source: "/slider/SliderSelected.png" 
    width: 65 
    height: 65 

    onDragActiveChanged: 
    { 


     if (!dragActive) 
     { 
      main.selection (x + slideImg.width/2 , true); 
     } 

    } 
    property bool dragActive: dragArea.drag.active 

} 

Le MouseArea ressemble à ceci:

MouseArea 
{ 
    id: dragArea 
    anchors.fill: thumb 
    enabled: !isDisabled 
    height: 65 
    width: 463 
    drag 
    { 
     readonly property int dragThreshold: 10 
     target: thumb 
     minimumX: 0 
     minimumY: 0 
     maximumY:100 

     maximumX: mainElement.width - thumb.width 
     axis: Drag.XAxis 
     threshold: dragThreshold 
    } 
    onCanceled: { 
     console.log("onCanceled ") 

    } 
    onExited: { 
     console.log("onExited ") 
     Drag.cancel() 
    } 


} 

Quand je détiens le sliderImage et faites-le glisser en dehors de la zone du curseur je voudrais annuler la traînée. La zone de traînée devrait être limitée à la zone de la souris. Si nous sortons de la zone de la souris, je voudrais annuler le glisser. Mais le Drag.cancel() n'annule pas le glisser. Est-il possible d'annuler la traînée?

Répondre

0

Je ne sais pas ce que vous essayez d'atteindre par cela, mais essayez de unset drag.target

onExited: drag.target = null 
onEntered: drag.target = myTarget 

Je pense que cela devrait fonctionner pour vous.

Mais vous pouvez également regarder les états (un état glissant, qui est activé uniquement lorsque la souris survole la zone.

MouseArea { 
    id: dragArea 
    anchors.fill: parent 

    states: [ 
     State { 
      when: dragArea.containsMouse 

      PropertyChanges { 
       target: dragArea 
       drag.target: dragger 
      } 
     } 
    ] 
} 

Vous pouvez également regarder le maximum et le minimum X et les valeurs Y.
Je ne pense pas qu'il soit possible de réinitialiser automatiquement la position, mais vous pouvez facilement gérer vous-même, en stockant les valeurs ne dans une variable supplémentaire , une fois que vous finissez légitimement un frein, et que vous les restaurez, une fois que vous ne le faites pas,

J'espère avoir été en mesure de vous aider!

+0

Ça m'a vraiment aidé, merci :) – user2717079