8. Qt5实现文件的拖拽显示数据

mainwindows.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 

#include 
#include 
#include 
#include 
#include 

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    void transData(const QString&);
protected:
    void dropEvent(QDropEvent *e) override;//重写QDropEvent方法
    void dragEnterEvent(QDragEnterEvent *event) override;//重写dragEnterEvent方法
};

#endif // MAINWINDOW_H

mainwindows.cpp

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->setAcceptDrops(true); // MainWindow 允许拖拽操作
    ui->textEdit->setAcceptDrops(false); // textEdit拖拽取消,取消textEdit默认的拖拽方式
}

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

void MainWindow::transData(const QString &filePath)
{
    QFile file(filePath);
    file.open(QIODevice::ReadOnly);
    QByteArray data = file.readAll();
    ui->textEdit->setText(QString(data));
    file.close();
}

// 拖拽处理函数
void MainWindow::dragEnterEvent(QDragEnterEvent *event)
{	
      /* 还可以通过匹配是不是自己想要的文件进行筛选
	  if(!event->mimeData()->urls()[0].fileName().right(3).compare("jpg"))
	  {
	   	event->acceptProposedAction();
	  }else
	  {
	    event->ignore();
	  }
      */
      //判断拖拽文件类型,文件名 接收该动作
      if (event->mimeData()->hasFormat("text/uri-list"))
      {
        event->acceptProposedAction();
      }

}

// 拖拽释放处理函数
void MainWindow::dropEvent(QDropEvent *event)
{

    if (!event->mimeData()->hasUrls())
    {
        return;
    }

    // 文件的路径
    QString filePath = event->mimeData()->urls()[0].toLocalFile();

    // 解析文件写入textEdit中
    transData(filePath);
}

查看结果:
8. Qt5实现文件的拖拽显示数据_第1张图片

  1. 可以看到当文件拖入到textEdit中只显示了文件的路径,而拖入除textEdit之外就能加载文件的内容,是因为textEdit空间默认AcceptDrops是开启的,而且它的拖拽后就是现实文件的路径,如果你要拖拽textEdit内现实文件的内容就需要将textEdit的AcceptDrops设置为false,或者通过ui->textEdit->setAcceptDrops(false);,如下图
    8. Qt5实现文件的拖拽显示数据_第2张图片
    还有可以通过重写textEdit中的拖拽事件函数(dragEnterEvent 和 dropEvent)。
    修改后的结果如下:
    8. Qt5实现文件的拖拽显示数据_第3张图片

你可能感兴趣的:(qt5,qt5,实现拖拽文件显示内容)