1 Qt中的拖放事件
1.1 拖放事件简介
拖放事件:
- 拖放一个文件进入窗口时将触发拖放事件。
- 每一个QWidget对象都能处理拖放事件。
- 拖放事件的处理函数为:
void dragEnterEvent(QDragEnterEvent* e);void dropEvent(QDropEvent* e);
拖放事件中的QMimeData:
- QMimeData是Qt中的多媒体数据类。
- 拖放事件通过QMimeData对象传递数据。
- QMimeData支持多种不同类型的多媒体数据。
常用MIME类型数据处理函数:

1.2 自定义拖放事件的步骤
步骤如下:
- 对接收拖放事件的对象调用setAcceptDrops成员函数。
- 重写dragEnterEvent函数并判断MIME类型:
- 期望数据:
e->acceptProposedAction(); - 其它数据:
e->ignore();
- 期望数据:
- 重写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();
}
参考资料:
582

被折叠的 条评论
为什么被折叠?



