程序员的知识教程库

网站首页 > 教程分享 正文

Qt | 便捷类中使用拖放功能 Drag(qt tablewidget使用)

henian88 2024-08-13 06:16:04 教程分享 20 ℃ 0 评论

前言:

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 属性的作用。

【文章福利】:Qt开发学习资料包、Qt面试题文档、项目视频、学习路线,包括(Qt C++基础,数据库编程,Qt项目实战、Qt框架、QML、Opencv、qt线程等等),免費分享,有需要的可以加君羊领取哦!~学习交流君羊937552610点击加入领取资料

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

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

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

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

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表