1. 程式人生 > >QT | 拖拽開啟檔案功能

QT | 拖拽開啟檔案功能

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的拖拽功能

就可以了。