• 6367阅读
  • 13回复

为什么QDataStream中的数据无法输出 [复制链接]

上一主题 下一主题
离线lied
 

只看楼主 倒序阅读 楼主  发表于: 2015-09-21
  1. QFile file("D:/Personal/Desktop/1.txt");
  2.     file.open(QIODevice::ReadOnly);
  3.     QDataStream xx(&file);
  4.     QString s;
  5.     //xx.device()->seek(0);
  6.     xx>>s;//只能输出一行
  7.     qDebug()<<s;

这段代码为什么无法输出1.txt的内容? seek在此处应该不需要吧?
离线lied

只看该作者 1楼 发表于: 2015-09-21
还有xx>>s;  是只能输出一行?  还是输出所有内容?  
离线roywillow

只看该作者 2楼 发表于: 2015-09-21
我看你是想读取一个文本文件吧
data stream是给二进制数据流使用的啊
并且它的读写并不是我们常规意义上能够直接看懂的那些文字
你是需要text stream吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线lied

只看该作者 3楼 发表于: 2015-09-21
回 roywillow 的帖子
roywillow:我看你是想读取一个文本文件吧
data stream是给二进制数据流使用的啊
并且它的读写并不是我们常规意义上能够直接看懂的那些文字
你是需要text stream吧 (2015-09-21 14:02) 

是的,是一个txt文件。我用QTextStream
ui->textEdit->setText(xx.readAll());
可以实现的。。。
但利用QDataStream 无法实现么?

还有
QFile file("D:/Personal/Desktop/1.txt");
    file.open(QIODevice::ReadOnly);
    QTextStream xx(&file);
    QString s,k;
    xx>>s;//只能输出一行
    ui->textEdit->setText(s);
也是只能输出一行,是因为>>本来就是针对一行而言?  
离线lied

只看该作者 4楼 发表于: 2015-09-21
回 roywillow 的帖子
roywillow:我看你是想读取一个文本文件吧
data stream是给二进制数据流使用的啊
并且它的读写并不是我们常规意义上能够直接看懂的那些文字
你是需要text stream吧 (2015-09-21 14:02) 

这一块不是很清楚,也是接触Qt不久,可以帮忙解释下么? 谢谢
离线lied

只看该作者 5楼 发表于: 2015-09-21
回 roywillow 的帖子
roywillow:我看你是想读取一个文本文件吧
data stream是给二进制数据流使用的啊
并且它的读写并不是我们常规意义上能够直接看懂的那些文字
你是需要text stream吧 (2015-09-21 14:02) 

0x15c1e9e8
使用s.data 可以读取出来这些数据,没有办法转换为文本内容么
离线roywillow

只看该作者 6楼 发表于: 2015-09-21
回 lied 的帖子
lied:这一块不是很清楚,也是接触Qt不久,可以帮忙解释下么? 谢谢 (2015-09-21 14:07) 

我觉得这个解释很麻烦,因为它们的作用真的就是字面上的意思,一个操作文本流,一个操作二进制数据流
你不妨倒过来用一次,用text stream和data stream分别往qfile里写数据,然后你打开那个txt看看就知道了
另外不要只记得写qstring,也写个int、qdatetime之类的看看效果
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线roywillow

只看该作者 7楼 发表于: 2015-09-21
回 lied 的帖子
lied:0x15c1e9e8
使用s.data 可以读取出来这些数据,没有办法转换为文本内容么 (2015-09-21 14:21) 

当你知道同样的数据用两个方式写入后的不同效果后
你应该就能知道什么样的数据该用什么样的方法读取了
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线tylan

只看该作者 8楼 发表于: 2015-09-21
QDataStream & QDataStream::operator>> ( char *& s )
This is an overloaded function.
Reads the '\0'-terminated string s from the stream and returns a reference to the stream.
Space for the string is allocated using new -- the caller must destroy it with delete[].
这是帮助文档的解释,完全解释了你的疑问啊。
离线lied

只看该作者 9楼 发表于: 2015-09-21
恩恩,看过了。 DataStream 会加入一些其他字符。。。数字好像也是*来表示
明白了,谢谢. 还有两个个疑惑
    QFile file("D:/Personal/Desktop/1.txt");
    file.open(QIODevice::ReadOnly);
    QTextStream xx(&file);
    QString s,k;
    xx>>s;//只能输出一行
这里xx>>s   是只能输出一行么?
然后QDataStream  流利用 >>输出时,只能按照输入的数据格式的顺序,一个个输出是么?

2.
想问一下,所以读取一般的txt文件利用QdataStream是没办法实现么?    个人感觉是这样
(当然如果是利用QDataStream 写一个txt文件,再利用DATAStream读取该txt文件肯定是可以的吧,
代码测试:
  1. void MainWindow::on_pushButton_3_clicked()
  2. {
  3.     QFile file("[color=#ff0000]file.txt[/color]");
  4.     file.open(QIODevice::WriteOnly);
  5.     QDataStream out(&file);   // we will serialize the data into the file
  6.     out << QString("the answer is");   // serialize a string
  7.     out << (qint32)42;
  8.     out << QString("hello world");
  9.     file.close();
  10.     file.open(QIODevice::ReadOnly);
  11.     QDataStream in(&file);    // read the data serialized from the file
  12.     QString str,str1;
  13.     qint32 a;
  14.     in>>str;
  15.     qDebug()<<str;
  16.     in>>a;
  17.     qDebug()<<a;
  18.     in>>str1;
  19.     qDebug()<<str1;
  20. }









不知道意思表述的清不清楚,还麻烦您帮忙讲解一下。  前面说的已经收获很多非常感谢。
离线lied

只看该作者 10楼 发表于: 2015-09-21
回 roywillow 的帖子
roywillow:当你知道同样的数据用两个方式写入后的不同效果后
你应该就能知道什么样的数据该用什么样的方法读取了 (2015-09-21 14:26) 

上一楼有给您回复消息,没@到你,麻烦您看一下。谢谢~
离线lied

只看该作者 11楼 发表于: 2015-09-21
回 roywillow 的帖子
roywillow:当你知道同样的数据用两个方式写入后的不同效果后
你应该就能知道什么样的数据该用什么样的方法读取了 (2015-09-21 14:26) 

经过测试QDataStream是可以读取txt文件的
ui->textEdit->setText(xx.device()->readAll());
可以把txt文件读取出来,和QTextStream一样
离线roywillow

只看该作者 12楼 发表于: 2015-09-21
回 lied 的帖子
lied:经过测试QDataStream是可以读取txt文件的
ui->textEdit->setText(xx.device()->readAll());
可以把txt文件读取出来,和QTextStream一样 (2015-09-21 17:12) 

然而这么做你并没有用到stream啊
device返回的是QIODevice,在这里就是你的qfile,也就是说你其实用的是qfile的readAll啊……
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线lied

只看该作者 13楼 发表于: 2015-09-23
回 roywillow 的帖子
roywillow:然而这么做你并没有用到stream啊
device返回的是QIODevice,在这里就是你的qfile,也就是说你其实用的是qfile的readAll啊…… (2015-09-21 19:42) 

原来是这样子。非常感谢~  l另  如之前所问  >>   对于TextStream是只能读取一行么?
对于DataStream是按照格式读取,这样对么?
快速回复
限100 字节
 
上一个 下一个