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);// 这样主窗口就可以接收放下事件了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术