• 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();
    }
  • 相关阅读:
    增强iOS应用程序性能的提示和技巧(25个)
    [iOS]用instancetype代替id作返回类型有什么好处?
    把cygwin加入右键菜单
    NSRange
    Centos7下安装MySQL
    (转)php 操作redis全部方法。
    unbuntu 安装php5.6
    unbuntu 安装nginx
    unbuntu 安装MySQL
    Ubuntu16.04下实现MySQL主从复制
  • 原文地址:https://www.cnblogs.com/yuanjia8888/p/14917886.html
Copyright © 2020-2023  润新知