QT实现多文件拖拽获取路径的方法

2022-08-04 13:42:38

本文实例为大家分享了QT实现多文件拖拽获取路径的具体代码,供大家参考,具体内容如下功能将多个文件拖拽进界面中,显示文件的路径。实现1、启用窗体放下操作this-setAcceptDrops(true)...

本文实例为大家分享了QT实现多文件拖拽获取路径的具体代码,供大家参考,具体内容如下

功能

将多个文件拖拽进界面中,显示文件的路径。

实现

1、启用窗体放下操作

this->setAcceptDrops(true);//启用放下操作

2、重写dragEnt编程erEvent()函数,用于筛选拖拽事件

void dragEnterEvent(QDragEnterEvent *e);

void MainWindow::dragEnterEvent(QDragEnterEvent *e)
{
  //对拖放事件进行筛选
  if (true)
  {
    e->acceptProposedAction(); //放行,否则不会执行dropEvent()函数
  }
}

3、重写dropEvent()函数,用于处理拖拽事件

void dropEvent(QDropEvent *e);

void MainWindow::dropEvent(QDropEvent *e)
{
  QList<QUrl> urls = e->mimeData()->urls();
  if(urls.isEmpty())
    return ;
  qDebug()<< urls.size();
  foreach (QUrl u, urls)
  {
    QString filepath = u.toLocalFile();
    pathlist.append(filepath);
  }
}

4、重复文件去除

QList存储文件路径,由于Qset是没android有重复项的,故可先转换为set,再转回为list即可。

pathlist = pathlist.toSet().toList();

效果

UI布局

QT实现多文件拖拽获取路径的方法

最后效果

QT实现多文件拖拽获取路径的方法

源码

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTextEdit>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:http://www.cppcns.com
  explicit MainWindow(QWidget *parent = 0);
  ~MainWindow();

protected:
  void dragEnterEvent(QDragEnterEvent *e);
  void dropEvent(QDropEvent *e);

private slots:
  void on_pushButton_upload_clicked();

private:
  Ui::MainWindow *ui;
  QList<QString> pathlist;
};

#endif // MAINWINDOW_H

源文件

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QphpDragEnterEvent>
#include <QFile>
#include <QDebug>
#include <QMimeData>
MainWindow::MainWindow(QWidget *parent) :
  QMainWindow(parent),
  ui(new Ui::MainWindow)
{
  ui->setupUi(this);

  ui->textEdit->setAcceptDrops(false); //禁用控件的放下操作
  this->setAcceptDrops(true);//启用放下操作
}

MainWindow::~MainWindow()
{
  delete ui;
}

void MainWindow::dragEnterEvent(QDragEnterEvent *e)
{
  //对拖放事件进行筛选
  if (true)
  {
    e->acceptProposedAction(); //放行,否则不会执行dropEvent()函数
  }
}

void MainWindow::dropEvent(QDropEvent *e)
{
  QList<QUrl> urls = e->mimeData()->urls();
  if(urls.isEmpty())
    return ;
  qDebug()<< urls.size();
  foreach (GGrwJdQUrl u, urls)
  {
    QString filepath = u.toLocalFile();
    pathlist.append(filepath);
  }
  //去掉重复路径
  pathlist = pathlist.toSet().toList();
  ui->textEdit->clear();
  for(int i=0;i<pathlist.size();++i)
  {
    QString path = pathlist.at(i);
    ui->textEdit->append(path);
  }
}


void MainWindow::on_pushButton_upload_clicked()
{
  qDebug()<<pathlist;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。