文件拖拽到窗口
方法一:重写部件拖拽处理函数
设置UI接受拖拽:
重写:
.h
#include <QDebug>
#include <QEvent>
#include <QDropEvent>
#include <QMimeData>
protected:
void dragEnterEvent(QDragEnterEvent * event);
void dropEvent(QDropEvent * event);
.cpp
void Dialog::dragEnterEvent(QDragEnterEvent * event)
{
qDebug()<<__FUNCTION__;
event->acceptProposedAction(); //接受拖拽的文件
}
void Dialog::dropEvent(QDropEvent * event)
{
qDebug()<<__FUNCTION__;
auto urls = event->mimeData()->urls();
for(auto it = urls.begin();it != urls.end();++it) //获取拖拽的文件名
qDebug()<<it->toLocalFile();
}
- 结果:
方法二:使用 eventFilter 设置拖动到控件上 - 设置控件属性,与方法一一致:
- 代码:
.h
bool eventFilter(QObject *watched, QEvent *event);
.cpp
构造函数:
ui->comboBox->installEventFilter(this);
eventFilter:
bool Dialog::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->comboBox) //控件的事件
{
if(event->type() == QEvent::DragEnter) //拖拽到控件
{
qDebug()<<"QEvent::DragEnter";
((QDragEnterEvent * )event)->acceptProposedAction(); //接受
return true;
}
else if(event->type() == QEvent::Drop) //拖拽完成
{
qDebug()<<"QEvent::Drop";
auto urls = ((QDragEnterEvent * )event)->mimeData()->urls();
for(auto it = urls.begin();it != urls.end();++it) //加到控件里头去
{
qDebug()<<it->toLocalFile();
ui->comboBox->addItem(it->toLocalFile());
}
return true;
}
}
return QDialog::eventFilter(watched,event);
}
- 拖拽完成后: