• 10282阅读
  • 7回复

关于QTextStream从QByteArray读数据的问题 [复制链接]

上一主题 下一主题
离线pywepe
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-21
先上代码,用QudpSocket发送QByteArray

这个是写端
void Widget::sendDatagram(){
    QString msgToSend =this->ui->say->text();
    QByteArray msg;
    QTextStream txtStream(&msg,QIODevice::WriteOnly);
    txtStream<<msg;
    this->ui->say->setText(QString(""));
    this->ui->view->append(msgToSend);
    this->ui->sendBtn->setEnabled(false);
    this->udpskt->writeDatagram(msg,this->addr,this->hisPort);
}



这个是读端
void Widget::processDatagram(QByteArray datagram){
    QTextStream txtStream(datagram);
    QString msg = txtStream.readAll();
    this->ui->view->append(msg);
}

现在的问题是在 this->ui->view->append(msgToSend); 这句只加了一空行在QTextEdit上面,没有显示出我输入的字符串
是不是这里的写或读出了什么问题?
请高手指教
离线dbzhang800

只看该作者 1楼 发表于: 2009-12-21
先不管QTextStream,你发送和接收到的QByteArray 一致么?
离线dbzhang800

只看该作者 2楼 发表于: 2009-12-21
另外,这个代码是要做什么呢?
  1.     QByteArray msg;
  2.     QTextStream txtStream(&msg,QIODevice::WriteOnly);
  3.     txtStream<<msg;




题外,QString转 QByteArray或者反过来,直接用QString的成员函数更简单些吧?QDataSteam 似乎也比QTextStream好些。
离线pywepe
只看该作者 3楼 发表于: 2009-12-22
引用第2楼dbzhang800于2009-12-21 21:47发表的  :
另外,这个代码是要做什么呢?
  1.     QByteArray msg;
  2.     QTextStream txtStream(&msg,QIODevice::WriteOnly);
  3.     txtStream<<msg;

.......



这个代码 我在尝试

我现在就是直接用 QByteArray 传信息的

但还 是会乱码
离线dbzhang800

只看该作者 4楼 发表于: 2009-12-22
你需要确定你哪儿有困难

1. 数据打包成 QByteArray
2  传输 QByteArray
3. 从 QByteArray 提取出数据

首先要保证发送和接收到的 QByteArray 是一致的,怎么看你应该知道了,对吧 toHex

然后,问题简化了: 数据 -> bytes -> 数据
QDataStream 的 >> 和 << 很容易完成这个了
离线318065268
只看该作者 5楼 发表于: 2009-12-23
发现很多人被QDataStream之类的东西给忽悠了。我会写个帖子专门说一下这个问题。下面是刚刚回答一个帖子时写的:
使用cout打印本来就不是很好用,往往会打印不出来;
而且还使用了QTextStream,需要解码后再打印。输入的是两个数字,需要用两个变量接收一下,然后再打印这两个变量。

QDataStream s(&buf,QIODevice::WriteOnly);
    s<<23<<43;
    cout<<buf.data()<<endl;

需要打印的话可以int i,j;  s>>i>>j; qDebug()<<i<<j;
使用QTextStream或QDataStream会带来一些便利性,但是内部会修改你的数据,类似于编解码,所以我们一般只在编解码之前和编解码之后打印,一般不在编码后和解码前打印或使用,这时候的数据并非其原始状态。
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线pywepe
只看该作者 6楼 发表于: 2009-12-23
引用第4楼dbzhang800于2009-12-22 22:26发表的  :
你需要确定你哪儿有困难
1. 数据打包成 QByteArray
2  传输 QByteArray
3. 从 QByteArray 提取出数据
.......



这样做也乱码 我试过了

我也试过 用QTextCodec编码后再放入QByteArray
然后再从QByteArray取出来  再按那种编码取 也乱码
离线dbzhang800

只看该作者 7楼 发表于: 2009-12-23
引用第6楼pywepe于2009-12-23 16:51发表的  :
这样做也乱码 我试过了
.......


这个?

能不能先回答一下一楼的问题,不然都不知道你哪儿遇到的困难
快速回复
限100 字节
 
上一个 下一个