Qt实现拖拽文件

1、拖拽文件获取文件路径

1.1、效果展示

Qt实现拖拽文件_第1张图片

1.2、具体代码

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

实现文件拖拽到窗体主要是重写:

void dragEnterEvent(QDragEnterEvent*event) Q_DECL_OVERRIDE; //文件拖拽到窗体内,触发
void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE; //文件拖拽到窗体内,释放,触发
#ifndef
#define

#include 
#include 
#include 
#include 
#include 
#include 
#include 

class DragFile : public QWidget
{
    Q_OBJECT
public:
    explicit DragFile(QWidget *parent = nullptr);
    ~DragFile();

    void dragEnterEvent(QDragEnterEvent*event) Q_DECL_OVERRIDE;
    void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE;
    void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
   
    QLineEdit* lineEdit;

};

#endif// DRAGFILE_H
#include "dragfile.h"

DragFile::DragFile(QWidget *parent) : QWidget(parent)
{
    lineEdit = new QLineEdit;
    lineEdit->setEnabled(false);
    QVBoxLayout* mainLayout = new QVBoxLayout(this);
    mainLayout->addStretch();
    mainLayout->addWidget(lineEdit);

    this->setAcceptDrops(true); //必须设置,不然无法接收拖放事件
}
DragFile::~DragFile()
{

}

void DragFile::dragEnterEvent(QDragEnterEvent *event) //拖动文件到窗口,触发
{
    if(event->mimeData()->hasUrls())
    {
        event->acceptProposedAction(); //事件数据中存在路径,方向事件
    }
    else
    {
        event->ignore();
    }
}

void DragFile::dragMoveEvent(QDragMoveEvent *event) //拖动文件到窗口移动文件,触发
{

}

void DragFile::dropEvent(QDropEvent *event) //拖动文件到窗口释放文件,触发
{
    const QMimeData *mimeData = event->mimeData();
    if(mimeData->hasUrls())
    {
        QList urls = mimeData->urls();
        QString fileName = urls.at(0).toLocalFile();

        lineEdit->setText(fileName);
     }
}

2、拖拽文件获取文件内容

有了上面的铺垫,我们就已经可以获取到文件的路径了,有了路径,剩下的就是怎么读取文件了,下例是拖拽文件并将文件内容更新到表格中:

2.1、效果展示

Qt实现拖拽文件_第2张图片

2.2、具体代码

#ifndef
#define

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

protected:
    void dragEnterEvent(QDragEnterEvent*event); //文件拖拽到窗体内,触发
    void dropEvent(QDropEvent *event); //文件拖拽到窗体内,释放,触发

private:
    Ui::MainWindow *ui;
    QTableView* m_Table;
    QStandardItemModel* m_TableModel;
};
#endif// MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    m_Table = new QTableView;
    this->setCentralWidget(m_Table);
    m_TableModel = new QStandardItemModel;
    m_Table->setModel(m_TableModel);

    m_Table->horizontalHeader()->setStyleSheet("QHeaderView::section{background:rgba(85, 127, 75, 0.3)}");
    m_Table->setAlternatingRowColors(true);
    m_Table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    m_Table->setSelectionBehavior(QAbstractItemView::SelectRows);
    m_Table->setEditTriggers(QAbstractItemView::NoEditTriggers);


    this->setAcceptDrops(true);
}

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

void MainWindow::dragEnterEvent(QDragEnterEvent* event) //文件拖拽到窗体内,触发
{
    if(event->mimeData()->hasUrls())
    {
        event->acceptProposedAction(); //事件数据中存在路径,方向事件
    }
    else
    {
        event->ignore();
    }
}
void MainWindow::dropEvent(QDropEvent* event) //文件拖拽到窗体内,释放,触发
{
    const QMimeData *mimeData = event->mimeData();
    if(mimeData->hasUrls())
    {
        QList urls = mimeData->urls();
        int column_length = urls.length();

        //1.清空原始数据再加入文件数据
        m_TableModel->clear();
        QStringList qstrListHeader;
        for(int i=0; isetHorizontalHeaderLabels(qstrListHeader);


        for(int j=0; jsetItem(i, j, new QStandardItem(column_data[i]));
                m_TableModel->item(i, j)->setTextAlignment(Qt::AlignCenter);
            }
        }
    }

    //================================================================================

    /*if(mimeData->hasUrls())
    {
        QList urls = mimeData->urls();
        int column_length = urls.length();

        for(int j=0; j new_column;
            for(int i=0; iinsertColumn(m_TableModel->columnCount(),new_column);
        }
    }*/
}

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

你可能感兴趣的:(QT开发,qt,c++,qt开发,qt教程,qt编程)