写点什么

Qt | 便捷类中使用拖放功能 Drag

作者:YOLO.
  • 2022-10-12
    河北
  • 本文字数:809 字

    阅读完需:约 3 分钟

Qt | 便捷类中使用拖放功能 Drag

前言:

QListWidget、QTableWidget 和 QTreeWidget 中每一种类型的项目都默认配置了一组不同的标签。比如,每一个 QListWidgetItem 和 QTreeWidgetItem 都可以被初始化为可用的、可检查的、可选择的、可以用作拖放操作的。而每一个 QTableWidgetItem 可以被编辑和用作拖放操作。尽管所有的标准项目都有一个或者两个标志来设置拖放,但是,一般还是需要在视图中设置一些属性来启用拖放。

  • 将视图的 dragEnable 属性设置为 true;

  • 允许用户将内部或者外部的项目放入视图中,需要设置视图的 viewport()的 acceptDrops 属性为 true;

  • 要显示现在用户拖拽的项目将要被放置的位置,需要设置 showDropIndicator 属性。

启用拖放功能:

//设置选择模式为单选listWidget.setSelectionMode(QAbstractItemView::SingleSelection);//启用拖放listWidget.setDragEnabled(true);//设置接受拖放listWidget.viewport()->setAcceptDrops(true);//设置显示将要被放置的位置listWidget.setDropIndicatorShown(true);//设置拖放模式为移动项目,如果不设置,默认为复制项目listWidget.setDragDropMode(QAbstractItemView::InternalMove);
复制代码

上面这些代码实现了当拖拽一个项目到一个合适的位置时,会显示一条短线,表明项目可以放置在该位置,这就是 showDropIndicator 属性的作用。

实现拖放功能的其他方式:

除了使用视图自带的拖放方式,我们还可以通过重新实现便捷类,通过响应便捷类的 QMousePressEvent、QMouseMoveEvent、QMouseReleaseEvent 来实现选中一个项目,项目的移动,项目的插入。

当然除了需要重新实现鼠标的响应消息,我们还需要实现 item 的插入和删除工作,当只是实现 item 的位置运动时,我们需要删除原来的 item,并在新的位置插入 Item。

如果想要实现显示适合位置的短线,我们需要跟踪鼠标移动的位置,和 item 的位置做比较,如果移动到合适的位置,就显示一条短线,移出则隐藏短线。

如果在拖动时需要显示一个虚的被拖拽的 item,还用到了 Qt 中的 copy 功能,这部分可以再去做了解。

发布于: 刚刚阅读数: 4
用户头像

YOLO.

关注

还未添加个人签名 2022-05-06 加入

还未添加个人简介

评论

发布
暂无评论
Qt | 便捷类中使用拖放功能 Drag_qt_YOLO._InfoQ写作社区