Qt 拖放事件 drag drop

2024-01-04 11:32
文章标签 qt 事件 drop 拖放 drag

本文主要是介绍Qt 拖放事件 drag drop,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Qt在部件中进行拖放

Qt中的拖放支持以QDrag为中心,拖放操作的大部分细节由该类处理。

除了创建QDrag对象外,还需要重新实现dragMoveEvent()来接受事件和dropEvent()处理部件上的数据。最终DragEnterEvent()需要重新实现才能接受事件。

在处理拖放操作的控件上,还需要调用

setAcceptDrops(true);

代码实现:

mydialog.h

class MyDialog : public QDialog
{Q_OBJECTpublic:explicit MyDialog(QWidget *parent = nullptr);~MyDialog();public slots:void makeDrag();protected:void dropEvent(QDropEvent *de);void dragMoveEvent(QDragMoveEvent *de);void dragEnterEvent(QDragEnterEvent *event);private:Ui::MyDialog *ui;
};class MyGroupBox : public QGroupBox
{public:MyGroupBox(QWidget *parent = nullptr) : QGroupBox(parent) {}protected:void dropEvent(QDropEvent *de);void dragMoveEvent(QDragMoveEvent *de);void dragEnterEvent(QDragEnterEvent *event);
};

mydialog.cpp

#include <QDebug>MyDialog::MyDialog(QWidget *parent) :QDialog(parent),ui(new Ui::MyDialog)
{ui->setupUi(this);QHBoxLayout *layout = new QHBoxLayout(this);QPushButton *pushButton = new QPushButton("Click Me", this);layout->addWidget(pushButton);connect(pushButton, SIGNAL(pressed()), this, SLOT(makeDrag()));MyGroupBox *box = new MyGroupBox(this);layout->addWidget(box);// 允许在dialog上拖放setAcceptDrops(true);// 允许在group box上拖放box->setAcceptDrops(true);
}MyDialog::~MyDialog()
{delete ui;
}void MyDialog::makeDrag() {QDrag *dr = new QDrag(this);// 拖放操作传递的数据存放在QMimeData 对象中QMimeData *data = new QMimeData;data->setText("This is a test");// 将QMimeData 数据的所属权分配给QDrag 对象dr->setMimeData(data);// 开始拖放操作dr->start();
}void MyDialog::dragMoveEvent(QDragMoveEvent *de) {// 在此处接收拖放事件de->accept();
}void MyDialog::dragEnterEvent(QDragEnterEvent *event) {// 将drop操作设置为建议的操作event->acceptProposedAction();
}void MyDialog::dropEvent(QDropEvent *de) {// 将数据解包,并按照希望的方式处理qDebug("Contents: my dialog %s", de->mimeData()->text().toLatin1().data());
}void MyGroupBox::dropEvent(QDropEvent *de) {// 将数据解包,并按照希望的方式处理qDebug("Contents: group box %s", de->mimeData()->text().toLatin1().data());
}void MyGroupBox::dragMoveEvent(QDragMoveEvent *de) {// 在此处接收拖放事件de->accept();
}void MyGroupBox::dragEnterEvent(QDragEnterEvent *event) {// 将drop操作设置为建议的操作event->acceptProposedAction();
}

调用:

int main(int argc, char *argv[])
{QApplication a(argc, argv);MyDialog d;d.show();return a.exec();
}

在groupbox上放开和在dialog中放开鼠标,如下输出:

Contents: group box This is a test
Contents: my dialog This is a test

这篇关于Qt 拖放事件 drag drop的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/569200

相关文章

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

Qt 中 isHidden 和 isVisible 的区别与使用小结

《Qt中isHidden和isVisible的区别与使用小结》Qt中的isHidden()和isVisible()方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操... 目录1. 基础概念2. 区别清见3. 实际案例4. 注意事项5. 总结1. 基础概念Qt 中的 isHidd

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

spring @EventListener 事件与监听的示例详解

《spring@EventListener事件与监听的示例详解》本文介绍了自定义Spring事件和监听器的方法,包括如何发布事件、监听事件以及如何处理异步事件,通过示例代码和日志,展示了事件的顺序... 目录1、自定义Application Event2、自定义监听3、测试4、源代码5、其他5.1 顺序执行

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要