這裏使用的.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';