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';




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章