如上图所示,如何实现通过拖拽的方式交换两个按钮的文本?

严格的说应该叫拖放方式,它包含了拖动和放置两个部分。拖动通过drag实现,放下通过dropEvent事件实现。该例子有点特殊就是拖动和放下的对象都是按钮,所以拖动和放下都是在同一个类中实现。具体实现步骤如下:

从QPushButton类派生一个类,用以重写事件。

需要重写的事件有mouseMoveEvent,在该事件中实现拖动的操作,dropEvent事件中实现放下的操作。而dragEnterEvent事件在dropEvent之前执行,为了让拖拽事件往下传递,所以也需要重写该事件。

2.让按钮接收放下事件

必须调用setAcceptDrops为true,否则不会调用dragEnterEvent和dropEvent。

3.创建QDrag对象

在鼠标移动的事件中创建QDrag对象,这样更符合操作的习惯。创建QDrag对象后要为它设置一个QMimeData,这里设置一个文本类型的数据,内容为当前按钮的文本。最后调用QDrag的exec函数,这样拖动部分的功能就实现了。

4.实现放下功能

在dropEvent事件中获取拖拽事件的数据,event->mimeData()返回的就是QMimeData。调用this->setText(event->mimeData()->text())实现了将当前按钮的文本设置为拖拽源对象的文本。

event->source()可以获取事件的源对象,在此例中源和目标对象都是DragButton。

5.重写dragEnterEvent

为了让事件传递,调用event->accept()。自此DragButton就完成了。

6.最后在界面中创建几个DragButton对象测试一下即可。

测试环境:windows 10    Qt5.9

qt禁止拖动_Qt如何实现拖拽功能?相关推荐

  1. bootstrap拖动div_BootStrap modal实现拖拽功能

    bootstrap中有javascript插件modal也就是对话框,加入拖拽功能,具体内容如下 在使用modal时首选需要引用js // 完成拖拽功能 // 完成Modal 编辑Html代码 Boo ...

  2. html5播放器禁止拖拽功能实例(教学内容禁止拖动观看)

    html5播放器禁止拖拽功能实例(常用于场景:企业培训.在线教学内容禁止学员拖动视频进行观看) 实例1:参数开启后,视频教学内容或视频课件将不允许拖动进度条. <div id="pla ...

  3. draggable禁止拖动_通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽...

    前言 关于讲解 JS 的拖拽功能的文章数不胜数,我确实没有必要大费周章再写一篇重复的文章来吸引眼球.本文的重点是讲解如何在某些特定的元素上禁止拖拽.这是我在编写插件时遇到的问题,其实很多插件的拖拽功能 ...

  4. 拖拽功能之水平拖动图片

    1实现技术 项目运行环境:ant pro 拖拽技术插件: react-sortable-hoc        实现拖拽功能 array-move                   实现拖拽过程中数据 ...

  5. QT上实现文件拖拽功能

    转自于QT上实现文件拖拽功能 声明dragEnterEvent和dropEvent事件函数,对窗口的拖拽行为进行处理 // 由MainWindow来截取拖拽事件 ①ui->lineEdit-&g ...

  6. 将OSG嵌入QT窗口系统中,实现拖拽界面

    将OSG嵌入QT窗口系统中,实现拖拽界面 一.原理 OSG底层使用的是OpenGL图形系统,QT也增加了对OpenGL的支持,因此,可以通过QT的OpenGL模块,实现将OSG窗口嵌入到QT中,这样可 ...

  7. css元素可拖动,使用css-transform实现更好的拖拽功能

    拖拽功能是目前网页上一种非常常见的功能,例如"登录弹窗"的拖拽.本文将使用transform来实现这一功能. 一.拖拽的用户行为分析与原理解析 二.代码实现 三.总结 本文所涉及的 ...

  8. swift 拖动按钮_Swift下使用UICollectionView 实现长按拖拽功能

    导读 简单用Swift写了一个collectionview的拖拽点击排序效果; 拖拽排序是新闻类的App可以说是必有的交互设计,如今日头条,网易新闻等. 效果 主要代码 手势长按移动 1.给Colle ...

  9. java swing 控件拖动_java swing中实现拖拽功能示例

    java实现拖拽示例 Swing中实现拖拽功能,代码很简单,都有注释,自己看,运行效果如下图: package com; import java.awt.*;import java.awt.datat ...

  10. qt如何实现backspace的功能_如何实现知识星球列表拖拽功能

    本 篇讲解一下如何实现在知识星球中星球列表的拖拽,各位可能都知道,我创建了一个星球[Hi Android],所以最近使用这个软件比较多,之前也写过关于这个软件如何生成分享卡的文章,就是那篇文章有小伙伴 ...

最新文章

  1. 正由另一进程使用,因此该进程无法访问此文件。
  2. SQL Server 高可用性(三)共享磁盘
  3. jpa hibernate mysql_008Spring JPA Hibernate MySQL
  4. 直播预告丨告别后知后觉的指标波动,神策智能预警分析直播来袭
  5. 传输参数【JAX-WS入门系列】第06章_使用MTOM处理二进制文件
  6. 控制台浏览器代码实战
  7. jdk8集合类流_JDK 8中的流驱动的集合功能
  8. Ubuntu配置安装NFS服务器
  9. python基础语法实验要求_Python基础语法-关于条件
  10. java spring getbean_spring依赖注入中获取JavaBean
  11. python具有可扩展的特性_Python的特点
  12. openEuler 高校开发者大赛报名启动!广阔天地,码出不凡
  13. ASP.Net在web.config中设置上传文件的大小方法
  14. python search函数 中文,Python-re中search()函数的用法详解(查找ip)
  15. 吴恩达深度学习笔记(五)
  16. 2021年山东省安全员C证考试及山东省安全员C证模拟考试
  17. Micropython——关于I2C和SoftI2C以及SPI和SoftSPI的区别
  18. pythone二级题库 + 刷题软件 (超详细解析,看完必过) 第十一套
  19. 外卖系统外卖O2O系统开发功能与开发难点介绍
  20. agv ti 毫米波雷达_在毫米波雷达领域,TI构建起了一条完整的护城河

热门文章

  1. TextBox只输入数字
  2. ubuntu下rz,sz命令用法
  3. Windows 8.1安装python出现api-ms-win-crt-runtime-l1-1-0.dll
  4. 小项目: low版本的 员工信息程序:
  5. java byte数组与16进制间的相互转换
  6. 11/27 记事本
  7. Android 动态生成布局 (多层嵌套)
  8. 静态页面评论处理以及列表处理
  9. mysql node 可视化_使用Prometheus进行Substrate节点可视化监控
  10. metacube 链接 mysql_2019 年 5月 随笔档案 - rgqancy - 博客园