如何在QML

时间:2016-04-06 10:56:02

标签: qt listview drag-and-drop qml

我正在开发一个QML应用程序,它基本上包含两个ListView。我想将QML项目从一个ListView复制到另一个。我尝试通过在委托中设置Drag属性来处理这个问题,但是当我拖动项目时项目不能超出视图范围,我认为Flickable容器处理鼠标事件。
所以,我想尝试以下方法:

  • 创建一个与ListView重叠的鼠标区域
  • 通过调用** createComponent()/ createObject()来创建一个新对象**
  • 将此对象重新显示为mousearea
  • 处理鼠标区域中的鼠标事件直至掉线

这个解决方案在我看来有点复杂,你有更好的方法来实现这个目标吗?

这是个坏主意而且太复杂了。我想我有办法实现这个目标:

  • ListView的每个委托都有一个可以拖动的隐藏项目,
  • 因为我的ListView在一个可重用的组件中,我使用一个属性传递一个更高的项目(这里是一个Rectangle而不是** MouseArea **),它可以用作拖动项目的父项,
  • 较高的项目包含两个ListView(以后可能会更多),
  • 拖动开始时,项目设置为可见并使用**状态**进行重新分配

所以,我错过了设置父母应该解决我的问题的观点。

1 个答案:

答案 0 :(得分:1)

下一个代码只是一个想法,但关键是在第一个MouseArea delegateListView,以便用户可以拖动这些项并将其放入{ {1}}属于第二个DropArea

在此示例中,ListView非常简单,只是一个数字。当项目被删除时,它将从第一个model

中删除

ListView

只需删除该行代码即可复制该项而非删除。

<强> main.qml

listView.model.remove(listView.dragItemIndex)