Qt | 便捷类中使用拖放功能 Drag
前言:
QListWidget、QTableWidget 和 QTreeWidget 中每一种类型的项目都默认配置了一组不同的标签。比如,每一个 QListWidgetItem 和 QTreeWidgetItem 都可以被初始化为可用的、可检查的、可选择的、可以用作拖放操作的。而每一个 QTableWidgetItem 可以被编辑和用作拖放操作。尽管所有的标准项目都有一个或者两个标志来设置拖放,但是,一般还是需要在视图中设置一些属性来启用拖放。
将视图的 dragEnable 属性设置为 true;
允许用户将内部或者外部的项目放入视图中,需要设置视图的 viewport()的 acceptDrops 属性为 true;
要显示现在用户拖拽的项目将要被放置的位置,需要设置 showDropIndicator 属性。
启用拖放功能:
上面这些代码实现了当拖拽一个项目到一个合适的位置时,会显示一条短线,表明项目可以放置在该位置,这就是 showDropIndicator 属性的作用。
实现拖放功能的其他方式:
除了使用视图自带的拖放方式,我们还可以通过重新实现便捷类,通过响应便捷类的 QMousePressEvent、QMouseMoveEvent、QMouseReleaseEvent 来实现选中一个项目,项目的移动,项目的插入。
当然除了需要重新实现鼠标的响应消息,我们还需要实现 item 的插入和删除工作,当只是实现 item 的位置运动时,我们需要删除原来的 item,并在新的位置插入 Item。
如果想要实现显示适合位置的短线,我们需要跟踪鼠标移动的位置,和 item 的位置做比较,如果移动到合适的位置,就显示一条短线,移出则隐藏短线。
如果在拖动时需要显示一个虚的被拖拽的 item,还用到了 Qt 中的 copy 功能,这部分可以再去做了解。
版权声明: 本文为 InfoQ 作者【YOLO.】的原创文章。
原文链接:【http://xie.infoq.cn/article/1cd8532e6c300bbcc71a3d9be】。未经作者许可,禁止转载。
评论