您的位置 首页 > 数码极客

qwidget隐藏边框后如何拖动

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


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


  1. 从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 Q


责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“qwidget隐藏边框后如何拖动”边界阅读