Qt——读入txt文件,写入到表格
2014-11-21 13:35
393 查看
整体程序:
#include "tablewidget.h" #include <QtWidgets> #include <QFile> #include <vector> #include<iostream> #include <fstream> void readData() //读入一张图的数据,将txt的二维数据传输到二维数组中 { std::ifstream fin; fin.open("Imagedata.txt"); if (fin.fail()) { std::cout << "File open error!"; int m; std::cin >> m; } else{ for (int i = 0; i < 85425; i++) { for (int j = 0; j < 33; j++){ fin >> imageData[i][j]; } } fin.close(); } } int x=1; int y=20; //原本三维数组(225,355,33)转换成(85425,33)的矩阵 int location = (x-1)*355+y;<span style="white-space:pre"> </span>//225*355的图上坐标为(x,y)的点数据存储在第location行 double imageData[85425][33]; <span style="white-space:pre"> </span>//(1,1)的点在第一行,(1,2)的点在第二行。。。(1,355)点在第355行,(2,1)点在第356行,以此类推 TableWidget::TableWidget() { table = new QTableWidget(this); table->setColumnCount(56); table->setRowCount(60); //创建了一个60*56的表格 QStringList headers; headers <<"400nm"<<"410nm"<<"420nm"<<"430nm"<<"440nm"<<"450nm"<<"460nm"<<"470nm"<<"480nm"<<"490nm" <<"500nm"<<"510nm"<<"520nm"<<"530nm"<<"540nm"<<"550nm"<<"560nm"<<"570nm"<<"580nm"<<"590nm" <<"600nm"<<"610nm"<<"620nm"<<"630nm"<<"640nm"<<"650nm"<<"660nm"<<"670nm"<<"680nm"<<"690nm" <<"700nm"<<"710nm"<<"720nm"<<"730nm"<<"740nm"<<"750nm"<<"760nm"<<"770nm"<<"780nm"<<"790nm" <<"800nm"<<"810nm"<<"820nm"<<"830nm"<<"840nm"<<"850nm"<<"860nm"<<"870nm"<<"880nm"<<"890nm" <<"900nm"<<"910nm"<<"920nm"<<"930nm"<<"940nm"<<"950nm"; table->setHorizontalHeaderLabels(headers); //设置行标题,列标题不用设置,会自动排序 table->resize(1366,200); readData(); for (int column = 0; column < 33; ++column) { QTableWidgetItem *item0; item0 = new QTableWidgetItem; double m=imageData[location][column]; QString txt = QString("%1").arg(m); //把十进制数字转换成string型 item0->setText(txt); table->setItem( 0 , column , item0); //把txt内容填进表格里 } }
接下来分别介绍:
第一:readData()函数,用于读取文件
void readData() { std::ifstream fin; fin.open("Imagedata.txt"); if (fin.fail()) { std::cout << "File open error!"; int m; std::cin >> m; } else{ for (int i = 0; i < 85425; i++) { for (int j = 0; j < 33; j++){ fin >> imageData[i][j]; } } fin.close(); } }首先,肯定需要包含头文件 <fstream>和<iostream>,<iostream>负责输入输出,而<fstream>负责文件的读写,主要有如下三种函数
#include <fstream> ofstream //文件写操作 内存写入存储设备 ifstream //文件读操作,存储设备读区到内存中 fstream //读写操作,对打开的文件可进行读写操作这方面的介绍很多,具体也可参考链接http://blog.csdn.net/kingstar158/article/details/6859379
第二:建立一个56*60的表格
<pre name="code" class="cpp">TableWidget::TableWidget() { table = new QTableWidget(this); table->setColumnCount(56); table->setRowCount(60); QStringList headers; headers <<"400nm"<<"410nm"<<"420nm"<<"430nm"<<"440nm"<<"450nm"<<"460nm"<<"470nm"<<"480nm"<<"490nm" <span style="white-space:pre"> </span><<"500nm"<<"510nm"<<"520nm"<<"530nm"<<"540nm"<<"550nm"<<"560nm"<<"570nm"<<"580nm"<<"590nm" <<"600nm"<<"610nm"<<"620nm"<<"630nm"<<"640nm"<<"650nm"<<"660nm"<<"670nm"<<"680nm"<<"690nm" <<"700nm"<<"710nm"<<"720nm"<<"730nm"<<"740nm"<<"750nm"<<"760nm"<<"770nm"<<"780nm"<<"790nm" <<"800nm"<<"810nm"<<"820nm"<<"830nm"<<"840nm"<<"850nm"<<"860nm"<<"870nm"<<"880nm"<<"890nm" <<"900nm"<<"910nm"<<"920nm"<<"930nm"<<"940nm"<<"950nm"; table->setHorizontalHeaderLabels(headers); //设置行标题,列标题不用设置,会自动排序 }
创建一个QTableWidget的类,设置表格行列,与行标题。或者也可以这样创建表格
QTableWidget *table = new QTableWidget(60,56); //新建一60行56列的表格
如果想要实现增加行,可以参考这篇文章,此处附上一个链接http://blog.csdn.net/xgbing/article/details/7774737
但问题是显示出来的表格太小,不知道是不是自己软件系统又抽什么疯了,所以我又调用了resize函数来调节表格大小。
table->resize(1366,200);
这里的1366是从哪儿得到的呢?我是查看了窗口的分辨率得知的,调用函数
QDesktopWidget *d = QApplication::desktop(); int w = d->width(); // 返回桌面宽度 int h = d->height(); // 返回桌面高度
我也曾试过直接让table->resize(w,h);但是这种做法会让我失去滚动条,另外介于比例好看的原因,我只取了它的宽度。
第三:把数组写进表格里
<pre name="code" class="cpp">for (int column = 0; column < 33; ++column) { QTableWidgetItem *item0; item0 = new QTableWidgetItem; double m=imageData[location][column]; QString txt = QString("%1").arg(m); //把十进制的数字地转换成string型 item0->setText(txt); table->setItem( 0 , column , item0); //把txt内容填进表格里 }
也可以通过下面方式简单地在表格内输入内容
table->setItem(0, 0, new QTableWidgetItem(QString("1")));
Qstring只能输入字符串,所以需要把十进制数字转换成string型的才行,通过以下语句解决了这个问题。
QString txt = QString("%1").arg(m);其中%1用第一个数字代替,%2就用第二个数字代替,简单来说就是用字符串变量参数依次替代字符串中最小数值,比如:
QString status = QString("Processing file %1 of %2: %3") .arg(i).arg(total).arg(fileName);
结果就是"Processing file i of totalt: fileName"
再看arg的定义:QString::arg ( int a, int fieldWidth = 0, int
base = 10, const QChar & fillChar = QLatin1Char( ' ' ) ) const,这里fieldWidth表示字符宽度,base表示进制
相关知识主要参考这篇http://qimo601.iteye.com/blog/1420750
相关文章推荐
- Qt写入txt文件
- 将数据一行一行追加读入txt文件,以行的形式(将信息一条一行读入txt文件,追加继续写入)
- QT写入txt文件
- py3 读入和写入csv,txt文件
- 【QT】添加资源+写入txt文件
- Java读写文件,读取execl表格,读取指定行列单元格信息,拼接sql,写入TXT文档。
- ORACLE 中写入txt文本与从Txt文件中读入数据 修改表结构
- Qt写入txt文件
- Qt写入txt文件方法
- ORACLE 中写入txt文本与从Txt文件中读入数据 修改表结构
- 怎样把数当做字符串写入另外的txt文件?
- VS.net配合VSS时,编译报错:未能向文件“.csproj.FileListAbsolute.txt”写入命令行 对路径 的访问被拒绝。
- TXT文件写入
- 使用文本排版大师(TxtEdit/TEditer)在记事本文件中绘制表格。
- 存储过程将.txt.xls文件数据导入数据库表格
- Javascript写入txt和读取txt文件 (转)
- File.WriteAllText 写入TXT文件时不能正确换行只显示方块
- VS.net VSS时,编译报错:未能向文件“.csproj.FileListAbsolute.txt”写入命令行 对路径 的访问被拒绝。
- j2me 创建txt文件,写入数据
- 未能向文件“.csproj.FileListAbsolute.txt”写入命令行 对路径 的访问被拒绝。2008年05月27日 星期二 下午 05:16