【发布时间】:2018-02-13 10:36:12
【问题描述】:
我有以下代码允许在应用程序窗口上平移图像
代码:
import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2
ApplicationWindow {
id: app
visible: true
title: qsTr("Test panning an Image")
width: 700
height: 700
Image {
id: my_image_item
source: "http://doc.qt.io/qt-5/images/declarative-qtlogo.png"
MouseArea{
anchors.fill: parent
drag.target: my_image_item
drag.axis: Drag.XAndYAxis
}
}
}
目标:
我想阻止图像被拖动/平移到其父级之外。
基本上我不想让my_image_item被移到一个位置:
-
my_image_item的右边缘位于其父级左边缘的左侧, -
my_image_item的左边缘位于其父节点右边缘的右侧 -
my_image_item的顶部边缘位于其父底部边缘的下方 -
my_image_item的底部边缘位于其父级顶部边缘的上方
主要问题:
当用户拖动my_image_item 时,如何将my_image_item 的移动限制在其父级的边缘内?
次要问题:(如果回答很好):
限制my_image_item 移动的项目需要严格地是它的父项?或者它也可能是另一个不是其父项的项目? (至少一个共享一个共同的 QML 父级)
【问题讨论】:
-
你试过
onDragFinished() -
onDragFinished将如何提供帮助? -
@Game_Of_Threads 这无济于事。有助于克服懒惰并应用一些基本的三年级数学来设置阻力限制以映射到您想要限制阻力的任何区域。提示 - 您还必须考虑拖动项目的尺寸和相对于拖动项目的拖动原点。
-
@dtech 我几乎在我在下面发布的问题的答案中发现了这一点。但是删除了那个答案,因为它与我在问题中设定的要求相差 10%。但无论如何,我自己弄清楚了那个数学。我会更新我的答案