-
环境介绍
系统:Win10 64位
Qt版本:Qt5.12.7
编译器:Qt5.12.7 MinGW
可选择打开*.csv、*.txt、*.jpg格式文件,图片文件和文本文件可分别在label控件和textEdit控件
打开文件后效果:
实现步骤
1.Qt Creator 设计窗口添加一个Push Button控件,名称“打开文件”
2.添加Label控件用于显示图片文件
3.添加Text Edit控件用于显示文本文件
4.Push Button控件添加槽函数
5.实现代码
mainwindow.h
private slots:
void on_pushButton_3_clicked();//打开文件按钮槽函数
void openCsv(const QString &fileName1);//打开csv文件
void openImage(const QString &fileName1);//打开图片文件
void openTxt(const QString &fileName1);//打开txt文件
mainwindow.cpp
#include <QFileDialog>
#include <QMessageBox>
#include <QFile>
#include <QDebug>
//打开文件按钮槽函数
void MainWindow::on_pushButton_3_clicked()
{
//获取文件路径
QString fileName = QFileDialog::getOpenFileName(this,
tr("Excel file"),
"./",
tr("Files (*.csv);;文本(*.txt);;图片(*.jpg *.bmp *.png)"));
if(!fileName.isEmpty())
{
//获取文件相关信息
QFileInfo info(fileName);
QString file_suffix = info.suffix();//获取文件后缀
//qDebug()<<"file_suffix="<<file_suffix;
//判断文件类型后打开
QStringList stringList;
stringList << "csv" << "txt"<<"jpg";
//0:csv 1:txt 2:jpg
switch (stringList.indexOf(file_suffix))
{
case 0:
qDebug()<<"格式=csv";
openCsv(fileName);
break;
case 1:
qDebug()<<"格式=txt";
openTxt(fileName);
break;
case 2:
qDebug()<<"格式=jpg";
openImage(fileName);
break;
}
}
}
//打开*.csv文件
void MainWindow::openCsv(const QString &fileName1)
{
QVector<double> x;
QVector<double> y;
x.clear(); //x的值
y.clear(); //y的值
QFile file(fileName1); // 新建QFile对象
if (!file.open(QFile::ReadOnly | QFile::Text))
{
QMessageBox::warning(this, tr("打开csv文件"),
tr("无法读取文件 %1:\n%2.")
.arg(fileName1).arg(file.errorString()));
return ;
}
QTextStream in(&file); // 新建文本流对象
QStringList list;//用于存储逐行数据
//逐行读取*.csv数据并将每列分别存入x、y数组中
while(!in.atEnd())
{
QString fileLine=in.readLine();//逐行读取数据
list=fileLine.split(",");//一行中的单元格以,区分
qDebug()<<"list="<<list;
double A = (list.at(0)).toDouble();//获取该行第1个单元格内容
x.append(A);
double B = (list.at(1)).toDouble();//获取该行第2个单元格内容
y.append(B);
}
qDebug()<<"x="<<x;
qDebug()<<"y="<<y;
file.close();
}
//打开图片(*.jpg)
void MainWindow::openImage(const QString &fileName1)
{
ui->label->clear();//先清除label内容
QImage img(fileName1);
if(!img.isNull())
{
//Qt::KeepAspectRatio自适应大小,不变形
img=img.scaled(ui->label->width(),ui->label->height(),Qt::KeepAspectRatio);
ui->label->setPixmap(QPixmap::fromImage(img));
}
}
//打开*.txt
void MainWindow::openTxt(const QString &fileName1)
{
QFile file(fileName1); // 新建QFile对象
if (!file.open(QFile::ReadOnly | QFile::Text))
{
QMessageBox::warning(this, tr("打开txt文件"),
tr("无法读取文件 %1:\n%2.")
.arg(fileName1).arg(file.errorString()));
return ;
}
QTextStream in(&file); // 新建文本流对象
ui->textEdit->setPlainText(in.readAll());
}