Qt拖放功能

mytextedit.h:

 1 #ifndef MYTEXTEDIT_H
 2 #define MYTEXTEDIT_H
 3
 4 #include <QTextEdit>
 5 #include "ui_mytextedit.h"
 6 #include <QUrl>
 7 #include <QDropEvent>
 8 #include <QMimeData>
 9 #include <QString>
10 #include <QDragEnterEvent>
11
12 class MyTextEdit : public QTextEdit
13 {
14     Q_OBJECT
15
16 public:
17     MyTextEdit(QWidget *parent = 0);
18     ~MyTextEdit();
19
20     //void dragEnterEvent(QDragEnterEvent *event);
21     void dropEvent(QDropEvent *event);
22
23 private:
24     Ui::MyTextEdit ui;
25 };
26
27 #endif // MYTEXTEDIT_H

mytextedit.cpp:

 1 #include "mytextedit.h"
 2
 3 MyTextEdit::MyTextEdit(QWidget *parent)
 4     : QTextEdit(parent)
 5 {
 6     ui.setupUi(this);
 7 }
 8
 9 MyTextEdit::~MyTextEdit()
10 {
11
12 }
13
14 void MyTextEdit::dropEvent(QDropEvent *event)
15 {
16     QList<QUrl> urls = event->mimeData()->urls();
17     if (urls.isEmpty())
18     {
19         return;
20     }
21
22     //QUrl url = urls.back();
23     foreach(QUrl url, urls)
24     {
25         QString file_name = url.toLocalFile();
26         this->append(file_name);
27     }
28 }
29
30 //void MyTextEdit::dragEnterEvent(QDragEnterEvent *event)
31 //{
32 //    if (event->mimeData()->hasFormat("text/uri-list"))
33 //        event->acceptProposedAction();
34 //}

上面为实现拖放文件,显示文件路径的自定义class MyTextEdit,发现函数void MyTextEdit::dragEnterEvent(QDragEnterEvent *event)注释掉但是功能没有影响,

将MyTextEdit文本框类去掉,换成QWidget类时,发现当把一个对象拖动到这个QWidget窗体上时,就会调用dragEnterEvent(),如果这个事件调用了acceptProposedAction(),就表明可以在这个窗体上拖放对象,

默认情况下窗口部件是不接受拖动的,因此,如果注释掉dragEnterEvent()函数,QWidget类上就不能实现拖放功能,qt会自动改变光标向用户说明这个窗口部件不是有效的放下点。重要的是,要在QWidget类上实现拖放,

首先需要设置setAcceptDrops(true)来接受放下事件。

如果想要在图形组件上启用拖放功能,可以使用QWidget上的setAcceptDrops()方法,设定组件接受拖放动作,在拖放动作发生时,会有相应的QDragEnterEvent、QDragMoveEvent、QDragLeaveEvent与QDropEvent等事件发生,可以重新定义dragEnterEvent()、dragMoveEvent()、dragLeaveEvent()、dropEvent()等事件处理,以处理相应的拖放事件,一般使用dragEnterEvent()和dropEvent()。

时间: 2024-11-15 17:18:06

Qt拖放功能的相关文章

Draggabilly – 轻松实现拖放功能(Drag &amp; Drop)

Draggabilly 是一个很小的 JavaScript 库,专注于拖放功能.只需要简单的设置参数就可以在你的网站用添加拖放功能.兼容 IE8+ 浏览器,支持多点触摸.可以灵活绑定事件,支持 RequireJS 以及 Bower 安装. 您可能感兴趣的相关文章 创意无限!一组网页边栏过渡动画[附源码下载] 真是好东西!13种非常动感的页面加载动画效果 你见过吗?9款超炫的复选框(Checkbox)效果 超赞!基于 Bootstrap 的响应式的后台管理模板 太赞了!超炫的页面切换动画效果[附源

如何使用LightningChart拖放功能进行数据转移 ?

本文主要介绍如何使用LightningChart扩展拖放功能为所有图表组件创建图表,如:系列,标题,轴线等等.支持用鼠标放置自定义对象到另一个图表中,如:可以添加或修改JSON/CSV或其他格式的数据. 开发人员也可以使用ChartManager工具来协调多个LightningChart控件. 支持拖放图表中所有系列到Windows Forms 和 WPF应用平台中. 注意!如果你只在一个图表中轴线之间拖放系列,不需要使用ChartManager. 在一个或多个图表中系列拖放: · 启用鼠标交互

HTML5移动开发之路(16)——神奇的拖放功能

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(16)--神奇的拖放功能 在智能手机发展飞速的现在拖放功能已经成为一种时尚,但是在我们的浏览器上是不是还缺少这种方便快捷的功能?在HTML5的新标准中就有关于拖放的标准,作为HTML5标准的一部分,任何元素都可以被拖放. 一.浏览器支持情况 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5 支持拖放. 注释:在 Safari 5.1.2 中不支持

WPF拖放功能实现zz

写在前面:本文为即兴而作,因此难免有疏漏和词不达意的地方.在这里,非常期望您提供评论,分享您的想法和建议. 这是一篇介绍如何在WPF中实现拖放功能的短文. 首先要读者清楚的一件事情是:拖放主要分为拖放源和拖放目标两个组成.拖放源和拖放目标各自拥有不同的事件.软件开发人员需要在适当的事件中完成相应功能. 试想拖放是如何操作的:用户选中一个界面元素,并在鼠标左键按下的情况下移动鼠标,最后,在到达拖放目标时松开鼠标左键,从而完成数据拖放的全过程.从程序编写的角度来看,用户需要在左键选中项目并按下的情况

HOW TO: 在 Visual C# .NET 应用程序中提供文件拖放功能

本文假定您熟悉下列主题: Windows 窗体列表框控件 Windows 窗体事件处理 生成示例的步骤 列表框控件提供了您需要处理的两个拖放事件: DragEnter 和 DragDrop. 当您在控件的边界内拖动对象时,便会发生DragEnter 事件:该事件用于确定当前拖动的对象是不是您要放到控件上的对象. 在将一个或多个文件拖到控件上时,需要处理此事件. 这使得在将对象拖到控件上方时,能够根据所拖动的对象显示相应的图标. 将拖动的对象释放到控件上时,会发生DragDrop 事件. 通过处理

Draggabilly 轻松实现拖放功能|插件下载|Demo下载

 Draggabilly是一款功能强大的网页元素拖动拖拽插件.该元素拖拽插件可以和jQuery结合使用,也可以以纯js的方式使用.它提供了强大的拖拽元素的能力,并且可以支持IE8浏览器和移动触摸设备.官网:https://draggabilly.desandro.com 网上有很多关于Draggabilly的例子, 不过大部分都不够详细, 我在网上下载了一个例子, 在此基础上做了一些描述, 包括参数含义, 事件绑定,元素事件(dragStart,dragMove,dragEnd,pointerD

Qt 查找功能

版权声明 该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 导语 这一篇我们来加上查找菜单的功能.因为要涉及Qt Creator的很多实用功能,所以单独用一篇文章来介绍.以前都用设计器设计界面,而这次我们用代码实现一个简单的查找对话框.除了讲解怎么实现查找功能,这里还详细地说明了怎么进行类中方法的查找和使用.其中也讲解了Qt Creator程序中怎样在函数的声明位置和定义位置间进行快速切换. 环境是:Windows 7 + Qt 4.8.1+

浅谈QT打印功能实现

QT作为一款轻量级的集成开发环境,其设计的目标是使开发人员利用QT这个应用程序框架更加快速及轻易的开发应用程序.要达到此目的,要求QT必须能够跨平台,QT能够在32位及64位的Linux,MAC OS X以及Windows上运行. 现在我们想在项目中加入一项打印功能,即使在不同的操作系统环境下,仍然能有相同的用户体验,在实现中发现QT对打印的支持不是那么友好.我们希望在跨平台的情况下,能打印各种文档,比如用户的简历,发现如果不调用对应操作系统的内核外壳打印函数,这项工作变得异常艰难.我们希望用Q

Qt圆角功能和状态组合按钮,可以显示颜色或者图片

使用两个按钮和一个Label封装了一个功能和状态圆角组合按钮,Label用来显示颜色或者图片. 实现的效果如下: 显示图片: 显示红色: 其中颜色或者图片是通过函数设置进去的. 两个按钮:前一个是状态按钮,可以Check,表示使用此项功能:后一个按钮是功能按钮,可以Check,表示跳转到此功能对应的选项.两个按钮都有信号,可以通过信号进行连接你需要的槽函数. 具体实现代码: #include <QPushButton> #include <QLabel> class QStateF