QT | 拖拽開啟檔案功能
阿新 • • 發佈:2018-12-13
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的拖拽功能
就可以了。