2016-08-13 21 views
0

在QML中,我想创建一个文本,当鼠标放在它上面时移动。当鼠标不再上时,它应该回到原来的位置。当鼠标位于文本上时,代码中的变量“toogle”的值为true,否则为false。在QML中将变量设置为固定值

property real distance: myText.x 

... 

Text { 
    id: myText 

    property bool toogle 
    x:toogle?distance+2:distance   
    } 

显然,问题是,当鼠标在文本距离的价值将增加,这将创建循环:文本将只要鼠标在它总是感动。

如何在创建文本时保存文本的原始x位置的值,并保持不变以避免出现此不希望的循环?

回答

1

你可以定义一个属性,只要组件加载完成其设定为一个固定值:

// Keep track of the original position. 
property real originalPosition; 

Component.onCompleted: { 
    originalPosition = myText.x; 
} 

我有点困惑你的问题,虽然,你想要的文字,以保持运动或不运动每当鼠标悬停在文本上?您发布的代码已经包含一个绑定循环。

要检测鼠标悬停您可以在文本元素中定义一个鼠标区域和听“containsMouse”属性能够重置文本的位置:

MouseArea { 
    id: mouseArea 
    width: parent.width 
    height: parent.height 
    hoverEnabled: true 
    onContainsMouseChanged: { 
     console.log("Changed: " + containsMouse); 
     if (!containsMouse) { 
      myText.x = myText.originalPosition; 
     } else { 
      myText.x = mouseArea.containsMouse ? myText.originalPosition+2: myText.originalPosition; 
     } 
    } 
} 

这最后的实现只移动文本2每当鼠标停止悬停时,只要文字被徘徊,并回到原始位置,这些像素就会返回到原始位置。徘徊时,它不会连续移动文字2像素。

+1

正是我想要的,非常感谢! – Thommy