QT 向窗体拖动csv文件读取打开数据


add.h
#ifndef ADD_H
#define ADD_H

#include <QWidget>
#include <QDragEnterEvent>
#include <QTextStream>
#include <QMimeData>
#include <QDebug>
#include <QFile>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class add; }
QT_END_NAMESPACE

class add : public QWidget
{
    Q_OBJECT

public:

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

    void dropEvent(QDropEvent * event);                 //放下事件
    add(QWidget *parent = nullptr);
    ~add();

private:
    Ui::add *ui;
};
#endif // ADD_H


add.cpp
----------------------------------------------------------------------
#include "add.h" #include "ui_add.h" add::add(QWidget *parent) : QWidget(parent) , ui(new Ui::add) { ui->setupUi(this); //设置接受拖拽 setAcceptDrops(true); } add::~add() { delete ui; } /* void add::dragEnterEvent(QDragEnterEvent * event) //拖动进入事件 { qDebug()<<"拖动进入事件"; if (event->mimeData()->hasUrls()) //数据中心是否包含URL { event->acceptProposedAction(); //如果是,接收 } else { event->ignore(); //否则忽略 } } void add::dropEvent(QDropEvent * event) //放下事件 { qDebug()<<"放下事件"; qDebug()<<"放下事件"<<event->mimeData()->text(); const QMimeData * mimeData = event->mimeData(); //获取MIME数据 if (mimeData->hasUrls()) //如果数据中有URL { QList <QUrl> urlList = mimeData->urls(); //获取url列表 QString filename = urlList.at(0).toLocalFile(); //第一个url表示为本地文件路径 if (!filename.isEmpty()) { QFile file(filename); //建立QFile对象,只读方式打开 if (!file.open(QIODevice::ReadOnly)) return; QTextStream in(&file); //建立文本流对象 // ui.textEdit->setText(in.readAll()); //将文件中所有内容读入编译器 } } } */ void add::dragEnterEvent(QDragEnterEvent * event) //拖动进入事件 { qDebug()<<"拖动进入事件"; if (event->mimeData()->hasUrls()) //数据中心是否包含URL { event->acceptProposedAction(); //如果是,接收 } else { event->ignore(); //否则忽略 } } void add::dropEvent(QDropEvent * event) //放下事件 { qDebug()<<"放下事件"<<event->mimeData()->text(); //获取路径 QString file_path = event->mimeData()->text(); //删除路径中不需要的 file_path.replace("file:///",""); // if(!file_path.contains("csv") or !file_path.contains("xls")){ // QMessageBox::information(this,"失败","打开失败"); // } //生成file对象 QFile file(file_path); //只能读、如果失败直接返回 if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "Open Excel file failed!"; return; QMessageBox::information(this,"失败","打开文件失败"); } //生成list QStringList list; //清空list list.clear(); //流式存储对象 QTextStream in(&file); in.setCodec("GB2312"); //这行的目的是支持读取中文信息 //遍历行、从第一行到最后一行 for(int i = 0; !in.atEnd(); i++) { QString fileLine = in.readLine(); list = fileLine.split(",", QString::SkipEmptyParts); //根据","开分隔开每行的列 if(i > 0) //这里的目的是第一行的表项不赋值,如果需要表项内容可以去掉if { //遍历列,我的Domo只有4列 for(int j = 0; j <= 4; j++) { //list.at(j)就是每列的值 } qDebug() << list; } } file.close(); }

main.cpp

#include "add.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    add w;
    w.show();
    return a.exec();
}
原文地址:https://www.cnblogs.com/yuanjia8888/p/14917886.html