我的问题是关于使用QML DragHandler来移动QML项目。我已经成功地通过拖动(当按住Ctrl修饰符时(实现了位置,如下所示:
DragHandler {
dragThreshold: 0
acceptedModifiers: Qt.ControlModifier
}
现在我想添加另一个处理程序,它允许我精确定位元素。其他软件通过使用shift修饰符来实现这一点。所以我想做的是,移动元素的量不是鼠标移动的像素量,而是比它小的量。理想情况下,我想做这样的事情:
DragHandler {
dragThreshold: 0
acceptedModifiers: Qt.ShiftModifier
onActiveTranslationChanged: {
activeTranslation *= 0.5;
}
}
不幸的是,activeTranslation
是只读的,我看不到任何其他可以使用的属性,也想不出任何其他方法……有人知道吗?
提前非常感谢!
不幸的是,Qt没有提供任何更改拖动速度AFAIK的方法。
但这是一种实现它的方法:
Rectangle
{
id: theDraggableElement
width: 100
height: width
color: "red"
DragHandler
{
id: dragHandlerFast
dragThreshold: 0
acceptedModifiers: Qt.ControlModifier
target: theDraggableElement
}
}
Item
{
id: invisibleItemForSlowDragging
width: theDraggableElement.width
height: theDraggableElement.height
Binding { restoreMode: Binding.RestoreBinding; when: !dragHandlerSlow.active; target: invisibleItemForSlowDragging; property: "x"; value: theDraggableElement.x }
Binding { restoreMode: Binding.RestoreBinding; when: !dragHandlerSlow.active; target: invisibleItemForSlowDragging; property: "y"; value: theDraggableElement.y }
DragHandler
{
id: dragHandlerSlow
dragThreshold: 0
acceptedModifiers: Qt.ShiftModifier
target: invisibleItemForSlowDragging
onTranslationChanged:
{
theDraggableElement.x = invisibleItemForSlowDragging.x - dragHandlerSlow.translation.x / 2
theDraggableElement.y = invisibleItemForSlowDragging.y - dragHandlerSlow.translation.y / 2
}
}
}
我已经用Qt 5.15.2对此进行了测试。