天宫鹤

Qt应用程序使用拖放打开文件

1.在mainwindow.h文件中添加函数声明:

protected:

void dragEnterEvent(QDragEnterEvent *event) override; // 拖动进入事件

void dropEvent(QDropEvent *event) override; // 放下事件

 

2.在mainwindow.cpp文件中对两个事件处理函数进行定义:

void MainWindow::dragEnterEvent(QDragEnterEvent *event) // 拖动进入事件
{
/*if(event->mimeData()->hasUrls()) // 数据中是否包含URL
        event->acceptProposedAction();                  // 如果是则接收动作
    else event->ignore();                               // 否则忽略该事件
*/
    QStringList acceptedFileTypes(QStringList() << "jpg"
                                                << "png"
                                                << "bmp"
                                                << "txt");

    if (event->mimeData()->hasUrls() && event->mimeData()->urls().count() == 1) {
        QString fileName = event->mimeData()->urls().at(0).toLocalFile();
        QFileInfo file(fileName);
        if (acceptedFileTypes.contains(file.suffix().toLower())) {
            event->acceptProposedAction();
        }
    }
}

void MainWindow::dropEvent(QDropEvent *event)           // 放下事件
{
    QString fileName = event->mimeData()->urls().at(0).toLocalFile();
    QFileInfo file(fileName);
    if (file.suffix().toLower() == "txt")
    {   // 实现文本文件拖放功能
        const QMimeData *mimeData = event->mimeData();      // 获取MIME数据
        if(mimeData->hasUrls()){                            // 如果数据中包含URL
            QList<QUrl> urlList = mimeData->urls();         // 获取URL列表
            // 将其中第一个URL表示为本地文件路径
            QString fileName = urlList.at(0).toLocalFile();
            if(!fileName.isEmpty()){                        // 如果文件路径不为空
                QFile file(fileName);     // 建立QFile对象并且以只读方式打开该文件
                if(!file.open(QIODevice::ReadOnly)) return;
                QTextStream in(&file);                      // 建立文本流对象
                ui->textEdit->setText(in.readAll());  // 将文件中所有内容读入编辑器
            }
        }
    }//if
    else {// 实现图片文件拖放功能
        QPixmap pixmap;
        if(pixmap.load(fileName))
        {
            //! GraphicsView 图形视图显示图像
            QGraphicsScene *scene = new QGraphicsScene(this);//创建场景
            scene->addPixmap(pixmap);                        //在场景中添加图元
            ui->graphicsView->setScene(scene);               //设置图形视图的场景
        }
        else
        {
            QMessageBox::critical(this,
                                  tr("Error"),
                                  tr("The image file cannot be read!"));
        }
    }//else
}

3.进入mainwindow.cpp文件,在构造函数中添加一行代码:
setAcceptDrops(true);// 这样主窗口就可以接收放下事件了

posted on   GoGrid  阅读(197)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示