版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39419087/article/details/81585677
MainWindow里面放一个textEdit,实现拖拽文件到textEdit里面打开的功能。
MainWindow.h文件声明
protected:
void dragEnterEvent(QDragEnterEvent *event);//拖动进入事件
void dropEvent(QDropEvent *event);//放下事件
MainWindow.cpp的构造函数中,添加
setAcceptDrops(true);
MainWindow.cpp中实现方法
//拖动进入事件
void MainWindow::dragEnterEvent(QDragEnterEvent *event){
if(event->mimeData()->hasUrls())//数据中是否包含URL
event->acceptProposedAction();//如果是则接收动作
else
event->ignore();//否则忽略该事件
}
//放下事件
void MainWindow::dropEvent(QDropEvent *event){
const QMimeData *mimeData=event->mimeData();//获取mime数据
if(mimeData->hasUrls()){//如果数据中包含URL
QList <QUrl> urlList=mimeData->urls();//获取URL列表
QString filename=urlList.at(0).toLocalFile();
if(!filename.isEmpty()){
QFile file(filename);
if(!file.open(QIODevice::ReadOnly))return;
QTextStream in(&file);
ui->textEdit->setText(in.readAll());
file.close();
}
}
}
运行出来,只能触发dragEnterEvent,不能触发dropEvent,猜想是因为实现的是mainWindow的dragEnterEvent和dropEvent,而将文件拖进textEdit,textEdit的dropEvent影响了mainWindow的dropEvent。
所以:
在mainWindow的构造函数中添加
ui->textEdit->setAcceptDrops(false);//屏蔽textEdit的拖拽功能
就可以了。