• 9522阅读
  • 9回复

关于QDataStream的用法,达人进阿!!! [复制链接]

上一主题 下一主题
离线gable
 
只看楼主 倒序阅读 楼主  发表于: 2006-05-09
QFile file( "file.txt" );
  file.open( IO_ReadOnly );
  QDataStream stream( &file ); // read the data serialized from the file
  QString str;
 
  stream >> str;      


这是我修改了参考文档上的一点点例程,file.txt里有一些英文字符。为什么运行的时候总出错,好像是这句用法有误: stream >> str;       这个错:terminate called after throwing an instance of 'std::bad_alloc'
what(): St9bad_alloc



是什么?

我只是想从一个把一个文件读到流里面,怎么用?
[ 此贴被XChinux在2006-05-09 08:20重新编辑 ]
离线gable
只看该作者 1楼 发表于: 2006-05-09
问题已解决,发现是没有把file,close()掉,但是原因还是不太明白,望达人说明
离线gable
只看该作者 2楼 发表于: 2006-05-09
另外我如果想把一张图片作为读进流里该如何?
离线myer

只看该作者 3楼 发表于: 2006-05-09
可以直接 stream << image(pixmap)
或者 stream >> image(pixmap)
http://user.qzone.qq.com/56430808
离线gable
只看该作者 4楼 发表于: 2006-05-09
楼上的?请问这是什么用法,可以具体点吗?另外都支持哪些格式的图片?
离线gable
只看该作者 5楼 发表于: 2006-05-09
也就是说QT中图片不能用QFILE打开是吗?
QT为什么不把图片当做普通文件来处理?
离线myer

只看该作者 6楼 发表于: 2006-05-10
用QImage ( const char * fileName, const char * format = 0 )
或者QPixmap ( const QString & fileName, const char * format = 0, Qt::ImageConversionFlags flags = Qt::AutoColor )
然后,stream << image/pixmap 或者 stream >> image/pixmap
例如:
img = new QImage('fileopen.png');
QDataStream ds(...);
ds >> img;
......
http://user.qzone.qq.com/56430808
离线gable
只看该作者 7楼 发表于: 2006-05-10
嗯,用你的方法我成功的将流写进了image对象,但是现在又遇到问题
我要做成网络传输,用以下代码发送:
QByteArray S_datagram;
QDataStream out(S_datagram,
IO_WriteOnly);
QImage image("1.jpg",
"JPEG");
out>>image;
socket->;writeBlock ( S_datagram.data() ,
S_datagram.size() );
这基本可行,但是当我用readblock来接收时发生问题。
QByteArray C_datagram;

socket->readBlock( C_datagram.data(), socket->bytesAvailable()
);
QDataStream in(C_datagram,
IO_ReadOnly);
QImage image;

in>>image;
运行时那个readBlock会报个null point error 的错误,请问版主,这是怎么回事?
我想实现图片的网络传输是用这个思路吗?
另外image接收了二进制数据流后如何把图像绘制出来?
这些问题真的很困扰我,望速回...
离线gable
只看该作者 8楼 发表于: 2006-05-10
socket->readBlock( C_datagram.data(), socket->bytesAvailable() );
  qWarning("%d", C_datagram.size());
这句能发现C_datagram并没有接收网络中发过来的数据包,为什么?
离线gable
只看该作者 9楼 发表于: 2006-05-10
以上问题均已解决,但在用版主的方法进行的时候
代码如下:
QDataStream in(C_datagram, IO_ReadOnly);
  QImage image;
  in>>image;
出现这个问题:
libpng error: IDAT: CRC error
C_datagram里面是二进制数据,没有错。
这个问题出现在运行的时候,望高人解答!
快速回复
限100 字节
 
上一个 下一个