Qt中的拖放事件

1 Qt中的拖放事件

1.1 拖放事件简介

拖放事件:

  • 拖放一个文件进入窗口时将触发拖放事件。
  • 每一个QWidget对象都能处理拖放事件。
  • 拖放事件的处理函数为:
    • void dragEnterEvent(QDragEnterEvent* e);
    • void dropEvent(QDropEvent* e);

拖放事件中的QMimeData:

  • QMimeData是Qt中的多媒体数据类。
  • 拖放事件通过QMimeData对象传递数据。
  • QMimeData支持多种不同类型的多媒体数据。

常用MIME类型数据处理函数:
在这里插入图片描述

1.2 自定义拖放事件的步骤

步骤如下:

  1. 对接收拖放事件的对象调用setAcceptDrops成员函数。
  2. 重写dragEnterEvent函数并判断MIME类型:
    • 期望数据:e->acceptProposedAction();
    • 其它数据:e->ignore();
  3. 重写dropEvent函数并判断MIME类型:
    • 期望数据:从事件对象中获取MIME数据并处理。
    • 其它数据:e->ignore();

编程实验:拖放事件初探
WIdget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QtGui/QWidget>

class Widget : public QWidget
{
    Q_OBJECT
protected:
    void dragEnterEvent(QDragEnterEvent* e);
    void dropEvent(QDropEvent* e);
public:
    Widget(QWidget *parent = 0);
    ~Widget();
};

#endif // WIDGET_H

Widget.cpp:

#include "Widget.h"
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QDebug>
#include <QList>
#include <QUrl>

Widget::Widget(QWidget *parent) : QWidget(parent)
{
    setAcceptDrops(true);
}

void Widget::dragEnterEvent(QDragEnterEvent* e)
{
    if( e->mimeData()->hasUrls() )
    {
        e->acceptProposedAction();
    }
    else
    {
        e->ignore();
    }
}

void Widget::dropEvent(QDropEvent* e)
{
    if( e->mimeData()->hasUrls() )
    {
        QList<QUrl> list = e->mimeData()->urls();

        for(int i=0; i<list.count(); i++)
        {
            qDebug() << list[i].toLocalFile();
        }
    }
    else
    {
        e->ignore();
    }
}

Widget::~Widget()
{
    
}

main.cpp:

#include <QtGui/QApplication>
#include "Widget.h"

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


参考资料:

  1. QT实验分析教程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值