这里使用的.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';