【发布时间】:2016-07-26 17:34:16
【问题描述】:
我正在开发一个 QML 应用程序,它基本上包含两个 ListView。我想将 QML 项目从一个 ListView 复制到另一个。我试图通过在委托中设置 Drag 属性来处理这个问题,但是当我拖动项目时,项目不能超出视图,我认为 Flickable 容器处理鼠标事件。
所以,我想尝试以下方法:
- 创建一个与 ListView 重叠的鼠标区域
- 通过调用 **createComponent() / createObject()** 创建一个新对象
- 将此对象重新设置为鼠标区域
- 处理鼠标区域中的鼠标事件直到放下
这个解决方案在我看来有点复杂,那么你有更好的方法来实现这个吗?
这是个坏主意,而且太复杂了。我想我有办法做到这一点:
- ListView 的每个委托都有一个可以拖动的隐藏项,
- 由于我的 ListView 在可重用组件中,我使用一个属性来传递一个更高的项目(这里是一个矩形,而不是 **MouseArea**),它可以用作拖动项目的父项,
- 较高的项目包含两个 ListView(将来可能会更多),
- 开始拖动时,项目设置为可见并使用 **State** 重新设置父项
所以,我错过了设置父母应该解决我的问题的观点。
【问题讨论】:
-
我一直在研究一些想法,我已经 uploaded 将代码发送到 GitHub。我不知道您的列表模型-在上传的代码中非常简单-如果我正确理解了这个问题,那么我还不想将其发布为答案。希望这会有所帮助。
-
感谢 sn-p,它与我想要实现的目标很接近,但该项目被移动而不是复制。我错过了拖动项目应该重新设置为更高级别项目的观点。我想我有一个灵感来自您的示例@Tarod 的解决方案。
-
太棒了!请告诉我您是否希望我发布我的代码作为答案,或者您要发布自己的解决方案。编码愉快!
-
是的,它可能很有用,你认为你可以添加评论来说明项目被移动而不是复制的事实吗?
标签: qt listview drag-and-drop qml