我有一个应用程序,该应用程序的右侧有一个图像列表(使用 一个ListView)和一个查看器在左侧。用户可以将图像从列表拖动到查看器,并将图像保留在列表中(类似于列表的预览,但是具有拖放功能)。
为此,当用户在列表中的图像上“按并保留”时,我将创建该图像的副本并将其放置在列表中的图像前面(我更改了边框,所以我知道它是副本中的一个)。
如果我随后释放并再次单击副本,则可以将副本移至查看器,释放副本后,我将销毁副本并处理放置在查看器区域的拖放。
除非释放并单击副本,否则我将无法执行此操作,因为在保持鼠标状态的情况下,我无法将“鼠标所有权”从列表图像的鼠标区域转移到副本图像的鼠标区域。
有什么想法吗?预先感谢!
答案 0 :(得分:0)
对于任何想要类似东西的人,这就是我的方法: 在代理上,我添加了鼠标区域:
MouseArea { // This is the mouse area on the original image-list
id: thumbnailDelegateMA
anchors { fill: parent }
cursorShape: containsMouse ? (drag.active ? Qt.ClosedHandCursor : Qt.PointingHandCursor) : Qt.ArrowCursor
property var copyThumbnail: undefined
drag.target: copyThumbnail ? copyThumbnail : null
onPressAndHold: {
if(!copyThumbnail){
copyThumbnail = createThumbnailCopy(imageID, parent)
parent = copyThumbnail
anchors.fill = copyThumbnail
}
}
onReleased:{
if(copyThumbnail){
parent = copyThumbnail.original
anchors.fill = copyThumbnail.original
copyThumbnail.destroy()
}
}
}
其中:
function createThumbnailCopy(uid, cparent){
var main_window = cparent.parent.parent;
var mapPos = mapFromItem(main_window, cparent.x, cparent.y);
var thumbnailCopy = thumbnailCopyComponent.createObject(
main_window,
{ "original": cparent,
"id": uid
"x": mapPos .x,
"y": mapPos .y
});
return thumbnailCopy;
}
并且:
Component{
id: thumbnailCopyComponent
Image {
id: thumbnailCopy
property string id;
property var original: undefined
Drag.hotSpot: Qt.point(width/2, 0)
Drag.active: true
fillMode: Image.PreserveAspectFit
source: "image://thumbnailProvider/" + id
}
}