直接看代码,就3个事件(我这里是推动文件得到路径例子)
//拖拽进入事件
void GLWidget::dragEnterEvent(QDragEnterEvent *event)
{
if(!event->mimeData()->urls()[0].fileName().right(3).compare("jpg") || !event->mimeData()->urls()[0].fileName().right(3).compare("png") ||
!event->mimeData()->urls()[0].fileName().right(4).compare("jpeg") || !event->mimeData()->urls()[0].fileName().right(3).compare("bmp")){
event->acceptProposedAction();
}
else{
event->ignore();//否则不接受鼠标事件
}
}
//拖拽移动事件
void GLWidget::dragMoveEvent(QDragMoveEvent *event)
{
Q_UNUSED(event);
event->setDropAction(Qt::MoveAction);
event->accept();
}
//拖拽放下事件
void GLWidget::dropEvent(QDropEvent *event)
{
const QMimeData *qm=event->mimeData();//获取MIMEData
const QString Path = qm->urls()[0].toLocalFile();//是获取拖动文件的本地路径。
emit dropPic(Path);
}
其中,一般没有中间的drapMoveEvent事件就能达到效果
但是,我试过QGLWidget这个类里面只重写了dragEnterEvent和dropEvent事件,发现dropEvent事件压根就没进去(不懂为什么)
解决办法:像我那样写个dragMoveEvent事件就好了(也不太懂)
还望各位大佬解答【不管对错,有想法都可以留言】