• 6355阅读
  • 3回复

[提问]一个关于QTextStream读取文件的问题 [复制链接]

上一主题 下一主题
离线summerpeking
 
只看楼主 倒序阅读 楼主  发表于: 2011-12-03
我在程序中想实现这样一个功能,即将一个纯色的bmp文件转换为另一种纯色的bmp文件,于是,我首先需要读取bmp文件的前54个字节,我用QTextStream来读取和存储,可是,事不随人愿,读取到第三个字节就出错了,它跳过去了,于是后面的字节也都读错了。一个只有不到20行的试验代码如下:

#include<QtGui>
#include<QtCore>
int main(int argc,char*argv[])
{
QApplication app(argc,argv);
     QFile file1("color.bmp");
     file1.open(QIODevice::ReadOnly);
     QTextStream in(&file1);
     QFile file2("colorTemp.txt");
     file2.open(QIODevice::WriteOnly);
     QTextStream out(&file2);
     char ch;
     for(int i=0;i<54;i++)
     {
         in>>ch;
         out<<ch;
//file2.flush();
     }


     for(int i=0;i<144;i++)
         out<<char(0)<<char(0)<<char(0);
     file1.close();
file2.close();
QPushButton button;
button.show();
return app.exec();
}
color.bmp文件如下附件,是12*12,由于不让传bmp,只好改一下后缀了,改回来即可。
color.txt (1 K) 下载次数:3

请高手们指教,不胜感激!
离线jdwx

只看该作者 1楼 发表于: 2011-12-03
回 楼主(summerpeking) 的帖子
首先读bmp这样的文件,应该用QDataStream,读文本用QTextStream。
我看更好的办法是处理图片,不是修改文件。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线roywillow

只看该作者 2楼 发表于: 2011-12-03
你用QTextStream的话人家会首先试图分析出这个“文本”文件的编码,然后按照这个编码进行读取,你用它来处理二进制文件岂不是很纠结……
QImage有个fill()函数,看样子能满足你的需求
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线summerpeking
只看该作者 3楼 发表于: 2011-12-03
谢谢二位,我最后用QPixmap的fill函数解决了那个功能,但是,如果我真的想从一个文件读取一些字节,放到另外一个文件里,如果用QDataStream需要规定版本,可是最初的文件就是正常的bmp文件,没有版本之说,所以我就考虑QTextStream了,我查到它有读取char和写入char的功能,于是我就照着上面做了,可是某些字节没有读取或者读取错误,我只是想实现C语言中fscanf(file,"%c",&ch)和fprintf(file,"%c",ch)的功能。所以,请指教如果真的只用QT库的话,怎样实现读取字节的功能?
快速回复
限100 字节
 
上一个 下一个