工作问题和学习记录(五):Qt+读取CSV表格并以表格显示

        本文主要讲述使用Qt,读取CSV并载入到表格控件中。

        CSV表格,是数据使用逗号(,)分隔,以呈现出一个表格形式。形式简单,那么操作起来就比较简单了。

         上图,可以看出每行每个数据使用逗号(,)隔开。那么无论怎么去操作,其实就是找到逗号(,)的编码(一般是ACSII码)以分别前后数据。不同的行,那就是换行符的,不过很多函数都是直接有处理的。如果是学习的话,使用C语言一类,需要自己处理的就多一些,这样比直接调用做好的方法更适合学习。直接使用做好的方法函数,自然就是比较快捷的。

        下面就是开始介绍博主遇到的与这一步的相关的工作内容以及实现。

        本部分功能主要实现,读取CSV文件中的数据,并以表格的形式呈现,其实会根据进行其它处理,在本篇文件中,仅讲诉一部分,也算作再一次学习吧

void DataWork::dataProcessing(QString fileName) 
{
    qDebug() << "receive the execute signal---------------------------------";
    qDebug() << "     current thread ID:" << QThread::currentThreadId();
    
    QVector<double> data;
    QStringList dataType;
    readCSVFile(fileName, data, dataType);

    // 发送结束信号
    qDebug() << "      finish the work and sent the resultReady signal\n";
    emit dataProcessingEnd(data, dataType);
}

        上面的这一段代码是共有槽函数,与主界面的信号连接。这个数据处理类,会使用其它线程运行,可以避免主界面“卡死”的情况。

        readCSVFile函数操作读取的实际过程,读取结束后,通过信号将数据传输给主线程。

void readCSVFile(QString fileName,QVector<double>& data, QStringList& dataType);

        fileName需要读取的文件路径,data为存放double的QVector的容器,dataType是数据所代表的类型。

    QFile file(fileName);

    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << "open file failed!" << '\n';
        return;
    }



      QFile file("in.txt");
      if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
          return;

      QTextStream in(&file);
      while (!in.atEnd()) {
          QString line = in.readLine();
          process_line(line);
      }

        上面这第一段代码,使用Qt中的QFile类操作文件,这里文件类比较完善,操作相对简单。

        第二段代码,是Qt帮助文档中示例,以示例为参照,简单讲一下。

QFile::QFile(const QString &name)

        Constructs a new file object to represent the file with the given name.

        示例中,QFile构造里面填入相对地址,构造一个file对象来表示给定的文件,接下来只需要操作这个file对象就相当于对文件操作。

        首先,使用open函数打开对应的文件,必须判断是否成功,需要打开文件不是百分百成功的(比较常见的原因有:文件已经被其它程序占用;命令过程中被打断等等)。文件若失败则直接返回结束,成功则继续执行对文件的各类操作。        

Detailed Description

        The QTextStream class provides a convenient interface for reading and writing text.

        创建QTextStream类对文件进行读写操作,

bool QTextStream::atEnd() const

        Returns true if there is no more data to be read from the QTextStream; otherwise returns false. This is similar to, but not the same as calling QIODevice::atEnd(), as QTextStream also takes into account its internal Unicode buffer.

        使用atEnd方法判断是否还未读的数据,若没有更多的数据了则返回true。我们操作时,还有数据则接着读取则需要进行取反,保证while循环接着执行。

        可以看到readLine方法,返回值是QString类型,而不是一个个数据,那么就需要进行再一步的处理了。当然前人已经把树载好了,那我们只乘凉,等有时间再栽树吧。

         使用QStringList对象就可以拿到一个一个的数据了。

       temp = line.split(",");
       for (int i = 0; i < tempSize; i++) {
            data.append(temp[i].toDouble());
            count++;
       }

        将从文件读取到数据,放入到容器当中,最后使用信号将准备好的数据和拿到的数据类型传输给主线程,然后进一步地载入表格之中。

        表格可以使用QTableWidget,setItem方法。

/*****************************分割线***************************/

        工作中总会有问题,一点点解决。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黯黯黯然了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值