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(); }