QT显示csv文件格式表格

这里使用的.csv格式的文件,对于Excel文件还没做研究,网上有人分享了他自己写的类,专门操作Excel表格。

这里操作.csv文件和操作txt文件一样,把数据按照行读入,然后进行数据分割就可以了,本来自己写数据分割的算法,后来发现QT的QStringList类就有这个功能,所以直接使用了,参考《C++ GUI QT4编程(第二版)》中第230页的内容。

在这个程序中,还增加了一个按照时间的筛检选择。

界面:


.h文件

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_displaytable.h"
#include <QFile>
#include <QTextStream>
#include<QFileDialog>
#include<QTableWidgetItem>
#include <iostream>
#include <vector>
using namespace std;
class displayTable : public QMainWindow
{
    Q_OBJECT

public:
    displayTable(QWidget *parent = Q_NULLPTR);
public slots:
	void on_openButton_clicked();
	void on_selectButton_clicked();
private:
    Ui::displayTableClass ui;
	vector<QString>linesStr;
};
.cpp文件

#include "displaytable.h"

displayTable::displayTable(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	ui.tableWidget->setColumnCount(10);//设置表格的行数和列数
	ui.tableWidget->setRowCount(100);
	ui.tableWidget->setFont(QFont("Helvetica"));
 
}

void displayTable::on_openButton_clicked()
{
	QString fileName = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("打开文件"),
		"", tr("file(*.csv)"));
	QFile file(fileName);
	file.open(QIODevice::ReadOnly | QIODevice::Text);
	QTextStream in(&file);
	QString line;
	QStringList fields;
	int row = 0;
	while (!in.atEnd())
	{
		line = in.readLine();
		linesStr.push_back(line);
		fields = line.split(',');//按照","分割字符,因为csv文件是以逗号间隔数据的
		for (int column = 0; column < fields.size(); column++){
			ui.tableWidget->setItem(row, column, new QTableWidgetItem(fields[column]));//显示数据
		}
		row++;
	}
}

void displayTable::on_selectButton_clicked()
{
	ui.tableWidget->clear();
	vector<QString>selectLineStr;
	for (int i = 0; i < linesStr.size(); i++){
		if (linesStr[i]>ui.lowEdit->text() && linesStr[i] < ui.upEdit->text()){
			selectLineStr.push_back(linesStr[i]);
		}
	}//筛选数据
	QStringList fields;
	//写标题
	fields = linesStr[0].split(',');
	for (int column = 0; column < fields.size(); column++){
		ui.tableWidget->setItem(0, column, new QTableWidgetItem(fields[column]));
	}//之前fields.size() 为linesStr[0] 错误 ,这里是因为QString是以一个字符为单位,而QStringList以一个数据储存
	//写内容
	for (int row = 0; row < selectLineStr.size(); row++){
		fields = selectLineStr[row].split(',');
		for (int column = 0; column < fields.size(); column++){
			ui.tableWidget->setItem(row+1, column, new QTableWidgetItem(fields[column]));
		}
	}

}
fields.size()
关于QStringlist和QString:以程序为例 fields[0]="102.02",而lineStr[0]='1';




  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值