JoeyWUSTL 2015-05-31 09:18 采纳率: 0%
浏览 2133
已结题

求大神给解释下下面这个C++函数?

void Server::sndMsg()
{
ui->sSendBtn->setEnabled(false);
clntConn = tSrv->nextPendingConnection();
connect(clntConn,SIGNAL(bytesWritten(qint64)),this,SLOT(updClntProgress(qint64)));

ui->sStatusLbl->setText(tr("开始传送文件 %1 !").arg(theFileName));

locFile = new QFile(fileName);
if(!locFile->open((QFile::ReadOnly)))  //以只读方式打开文件
{
    QMessageBox::warning(this, tr("应用程序"), tr("无法读取文件 %1:\n%2").arg(fileName).arg(locFile->errorString()));
    return;
}
totalBytes = locFile->size();  //获取带发送文件的大小并存储
QDataStream sendOut(&outBlock, QIODevice::WriteOnly);  //将发送缓冲区封装在一个QDataStream类型的变量中
sendOut.setVersion(QDataStream::Qt_4_7);
time.start();  // 开始计时
QString curFile = fileName.right(fileName.size() - fileName.lastIndexOf('/')-1);
sendOut << qint64(0) << qint64(0) << curFile;  //填写实际的总长度和文件长度
totalBytes += outBlock.size();
sendOut.device()->seek(0);  //将读写操作指向从头开始
sendOut << totalBytes << qint64((outBlock.size() - sizeof(qint64)*2));
bytesTobeWrite = totalBytes - clntConn->write(outBlock);
outBlock.resize(0);  //清空发送缓冲区以备下次使用

}

这个函数一个QT开发平台上P2P文件传输系统的核心部分,函数的作用是传输文件。但是,小弟不明白最后的这几句代码的意思:
sendOut << qint64(0) << qint64(0) << curFile;

totalBytes += outBlock.size();
sendOut.device()->seek(0); //将读写操作指向从头开始
sendOut << totalBytes << qint64((outBlock.size() - sizeof(qint64)*2));
为什么开始的话要讲两个qing64(0)读入sendOut数据流,而后来输出的时候又先输出totalBytes,后再输出outBlock.size()-sizeof((qint64)×2)
求大神指点,如果没行都能注释的话,我再加10个C币

  • 写回答

7条回答 默认 最新

  • 知常曰明 2015-05-31 09:33
    关注

    留下位置.你看下面.它seek(0),就是回到头上,然后又输出了totalBytes和一个size。前面的两个Qint64就是这两个数字的占位

    评论

报告相同问题?

悬赏问题

  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)