- 浏览: 3418122 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
sonichy:
Qt5改动很多,要改改了。
基于QItemDelegate的例子1 SpinBoxDelegate -
我的主页6:
楼主,2.2子查询的分页方式:SELECT * FROM ar ...
Mysql 分页语句Limit用法 -
liguoqi:
非常感谢楼主的用心指导,工具以及图片例子都提供了 赞!
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
问下这个图片怎么解压损坏呀
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载 -
liguoqi:
楼主讲解的非常详细,还附带工具和图片例子,非常感谢
两款免费DCIOM 图像浏览软件介绍和DICOM图像例子供下载
关键问题在于:QFile读取double型二进制数据流,只有两种方法处理数值。
一是通过QDataStream一个一个double读取,存储在一个QVector<double>中
二是通过QFile read(int len) 返回在一个QByteArray中,然后对这个QByteArray进行QDataStream序列化读取。
问题就出现在这个序列化读取中,这种需要循环读取值,耗费了大量时间。
不如C语言的一句size_t fread( void* buffer, size_t size, size_t count, FILE* stream );能迅速的读取进入一个Double[]数组中,时间消耗差距是几十倍。
可以细看下面两类代码,看看他们的时间消耗。
/** *函数介绍:读取裸数据文件 *输入参数:无 *返回值: 无 */ void RawData::readNakedDataFile() { QList< QVector<float> * > dataList; QList< float * > listList; QTime t; double duration; FILE *stream; QFile file("NakedData/nakedData.raw"); if (!file.open(QIODevice::ReadOnly)) return; QDataStream in(&file); in.setVersion(QDataStream::Qt_4_6); in.setByteOrder(QDataStream::LittleEndian); in.setFloatingPointPrecision(QDataStream::SinglePrecision); float m = 0; t.start(); qDebug() << "时间1:" <<t.currentTime().toString("hh:mm:ss.zz"); for(int i = 0;i < 2; i++) { QVector<float> *data = new QVector<float>(); for(int j = 0; j <1152*16; j++) { in >> m ; data->append(m); //qDebug() <<"输出:"<< m << "" << j; } dataList.append(data); } duration = t.elapsed(); qDebug() << "时间2:" <<t.currentTime().toString("hh:mm:ss.zz"); qDebug() << "时间" <<duration; file.close(); ////***********C fread 读取成功************// //float list[16*1152]; if( fopen_s( &stream, "NakedData/nakedData.raw", "r+b" ) !=NULL ) return; t.restart(); qDebug() << "时间1:" <<t.currentTime().toString("hh:mm:ss.zz"); for(int i = 0; i < 2; i ++) { float * list = new float[1152*16]; fread( list, sizeof(float), 1152*16, stream ); //for(int i = 0; i < 16*1152;i++) //qDebug() << list[i] << "" << i; listList.append(list); } qDebug() << "时间2:" <<t.currentTime().toString("hh:mm:ss.zz"); duration = t.elapsed() ; qDebug() << "时间" <<duration; fclose(stream); //打印两种读取结果,判断是否一致 //for(int i = 0; i < 2; i ++) //{ // QVector<float> *dataVector = dataList.at(i); // float * list = listList.at(i); // for(int j = 0; j < 1152*16; j++) // { // qDebug() <<"data:["<<i<<"]["<< j <<"]"<<dataVector->at(j) ; // qDebug() <<"list:["<<i<<"]["<< j <<"]"<< *(list++) ; // } //} }
当循环中的i为2圈的时候,消耗时间分别为 ms
当循环中的i为10圈的时候,消耗时间分别为 ms
当循环中的i为100圈的时候,消耗时间分别为 ms
当循环中的i为1000圈的时候,消耗时间分别为 ms
=============下面调整一下Qt读取文件的方法====================
/** *函数介绍:读取裸数据文件 *输入参数:无 *返回值: 无 */ void RawData::readNakedDataFile() { QList< QVector<float> * > dataList; QList< float * > listList; QTime t; double duration; FILE *stream; QFile file("NakedData/nakedData.raw"); if (!file.open(QIODevice::ReadOnly)) return; float m = 0; t.start(); qDebug() << "时间1:" <<t.currentTime().toString("hh:mm:ss.zzz"); for(int i = 0;i < 4; i++) { QByteArray array = file.read(1152*16*4); QDataStream in(&array,QIODevice::ReadOnly); in.setVersion(QDataStream::Qt_4_6); in.setByteOrder(QDataStream::LittleEndian); in.setFloatingPointPrecision(QDataStream::SinglePrecision); QVector<float> *data = new QVector<float>(); for(int j = 0; j <1152*16; j++) { in >> m ; data->append(m); } dataList.append(data); } duration = t.elapsed(); qDebug() << "时间2:" <<t.currentTime().toString("hh:mm:ss.zzz"); qDebug() << "时间" <<duration; file.close(); ////***********C fread 读取成功************// //float list[16*1152]; if( fopen_s( &stream, "NakedData/nakedData.raw", "r+b" ) !=NULL ) return; t.restart(); qDebug() << "时间1:" <<t.currentTime().toString("hh:mm:ss.zzz"); for(int i = 0; i < 4; i ++) { float * list = new float[1152*16]; fread( list, sizeof(float), 1152*16, stream ); listList.append(list); } qDebug() << "时间2:" <<t.currentTime().toString("hh:mm:ss.zzz"); duration = t.elapsed() ; qDebug() << "时间" <<duration; fclose(stream); for(int i = 0; i < 4; i ++) { QVector<float> *dataVector = dataList.at(i); float * list = listList.at(i); for(int j = 0; j < 1152*16; j++) { qDebug() <<"data:["<<i<<"]["<< j <<"]"<<dataVector->at(j) ; qDebug() <<"list:["<<i<<"]["<< j <<"]"<< *(list++) ; } } }
当循环中的i为0圈的时候,消耗时间分别为 ms
当循环中的i为10圈的时候,消耗时间分别为 ms
当循环中的i为100圈的时候,消耗时间分别为 ms
当循环中的i为1000圈的时候,消耗时间分别为 ms
发表评论
-
Qt官网变更【2012】
2012-09-21 19:30 4129Qt最近被Digia完全收购,诺基亚这两年的不理不睬,没有魄力 ... -
【转】QT实现不规则窗体
2012-09-21 18:50 4903看到好文章,收藏一下: 看到网上有很多不规则窗体的实现 ... -
Qt应用程序如何使用DCMTK类库进行二次开发DICOM数据传输
2012-09-13 09:35 0参考文章: 1、Using DCMTK with ... -
【转】将QT开发的界面程序封装成DLL,在VC中成功调用
2012-09-11 10:33 20987最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后 ... -
诺基亚挥别Qt,转手给Digia
2012-09-11 09:37 2770一家总部位于芬兰的IT业务供应商Digia今天宣布,已经签署了 ... -
Qt多线程间信号槽传递非QObject类型对象的参数
2012-09-07 15:29 21183一、以前就发现过这个问题: 在Qt项目中,有时候为了 ... -
QT样式表(QStyleSheet)
2012-08-17 10:37 17797QT样式表 (QStyleSheet) 作者:刘旭晖 ... -
FinalData磁盘文件恢复工具(绿色破解版)
2012-08-02 13:28 8467FinalData磁盘文件恢复工具(绿色破解版),使用起来很方 ... -
Eclipse Qt开发环境的建立【转】
2012-08-01 11:15 43101.下载Eclipse目前Eclipse+CDT已经可以 ... -
汽车辐射监测系统-Qt开发
2012-07-25 16:18 4627最近晚上抽空忙了两个月,才把一个小系统做完。虽然做的不是太完 ... -
Qt做发布版,解决声音和图片、中文字体乱码问题
2012-07-14 16:02 4800Qt做发布版,解决声音和图片、中文字体乱码问题 ... -
QTableView使用中的疑问,如何及时显示操作Model后的结果?
2012-06-01 14:52 0最终的解决方法:我正 ... -
【转】Qt QTableview使用
2012-06-01 09:49 9611QTableWidget是QT程序中常用的显示数 ... -
QTableView双击 单机事件信号
2012-06-01 09:47 22874双击QTableView的行,获取该行数据 代码 ... -
QMessageBox改变大小
2012-05-31 15:33 8359创建一个QMessageBox: QMessageBo ... -
更新QTableView中的进度条状态
2012-05-30 14:37 14730前段时间,我接触了,如何在一个QTableView中加入一个控 ... -
QThread 线程暂停 停止功能的实现
2012-05-29 11:56 12109为了实现Qt中线程的暂停运行,和停止运行的控制功能 需要在设 ... -
QT环境变量
2012-05-28 18:53 5536不知道为啥同事有台电脑,装完Qt-VS2008库,和VS Ad ... -
广告光
2012-05-24 18:33 0盈创广告联盟 http://www.yo114.cn/ ... -
Test
2012-05-24 18:22 2131Test<IMG SRC="cf08e32c2 ...
相关推荐
vs中有格式化输入,qt中也有自己的,适合新手
QSettings有时候不好用,所以用QFile写了个读写ini文件的模块 Qt 基于QFile 读写ini文件(包含QFile读取行,修改行数据,删除行数据)
先按行读取数据再按列取出数据
Qt使用QFile和QDataStream进行二进制数据文件的读写。QFile负责文件的IO设备接口,即与文件的物理交互,QDataStream以数据流的方式读取文件内容或写入文件内容。 本节以实例samp7_2演示二进制文件的读写.
《文件IO操作开发笔记(一):使用Qt的QFile对磁盘文件存储进行性能测试以及测试工具》 https://hpzwl.blog.csdn.net/article/details/128438303 在做到个别项目对日志要求较高,要求并行写入的数据较多,尽管写入...
Qt5开发及实例,实例CH903,使用QDataStream读写二进制文件。 (1)头文件“mainwindow.h”的具体代码 (2)源文件“mainwindow.cpp”的具体代码 函数fileFun()完成主要功能,其具体代码 void MainWindow::fileFun() {...
17.04-1-QFileDialog、QFile、对文件操作 18.04-2-鼠标事件(单击、双击、移动) 19.04-3-绘图事件9 [' Z2 ^/ t# B" t6 V3 ] 20.04-4-绘图事件例子讲解; J! L7 z. I3 P 21.04-5-关闭事件、窗体大小改变事件) ~# |7 ...
资源中包括《HEX文件格式解析.pdf》文章,使用QT实现HEX文件生成、HEX文件解析、文件读写及文件拼接功能的工程源码,因项目开发写的工程,可以直接使用,也可作为HEX文件操作参考。
文件读取操作,文件信息获取 博客地址:https://blog.csdn.net/qq_36926037/article/details/123854687
Qt5开发及实例,实例CH901,建立基于控制台工程,使用QFile类读写文本文件。 实现步骤如下。 (1)建立一个工程。选择“文件”→“新建文件或项目...”菜单项,在弹出的对话框中选择“项目”组下的“Application”→...
QFile file("./mapdata"); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::information(this,"","dfds"); return; } if(file.exists() == false) { QMessageBox::information...
Qt File读取txt文件数据并用QChart绘制曲线
包含:qpst.win.2.7_installer_00490.1.zip QUD.WIN.1.1 Installer-10039.2.zip qfil-70.zip adb_1.0.39.rar
QT的文件的读取,QFile的使用。
定义了两个函数 writeToFile 和 readFromFile,分别用于写入和读取文件。在 writeToFile 函数中,我们首先创建一个 QFile 对象,然后使用 open 方法打开文件,指定了文件的打开模式为 WriteOnly 和 Text。接着我们...
1、创建文件夹 2、写入文件: 3、修改文件内容: 4、删除文件: 5、修改文件名 6、INI文件写入操作:
Qt文件操作类QFile简介 Qt中使用QFile类来操作文件的输入/输出。继承至QIODevice,QIODevice类是输入/输出设备的基类, 为设备提供了公共实现和抽象接口用于读写块数据。QIODevice又继承至QObject。 1、使用QFile类...
QFILE烧录软件操作说明,根据工具实际操作编写,可用于MSM8909的平台,主要用于低端机(美国运营商补贴采购),操作说明比较详细,可有效指导新员式进行操作。
QT 清空目标文件夹内的所有内容,清空文件夹内的所有文件,删除非空文件夹,以上功能均做成了函数,调用时将文件夹全路径作为参数...删除文件及文件夹涉及到的类包括QDir、QFile、QFileInfo、QFileInfoList............
经过自己总结的 使用QT下的文件的读取等操作