QT | 拖拽打开文件功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 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的拖拽功能

就可以了。

猜你喜欢

转载自blog.csdn.net/qq_39419087/article/details/81585677