• 7028阅读
  • 4回复

[提问]能帮我解释下面代码的某些含义么,我基础很差。。 [复制链接]

上一主题 下一主题
离线wter27
 
只看楼主 倒序阅读 楼主  发表于: 2011-02-15
问题已用注释符号标出。。。请解释。。。还有如果想了解QT数据方面的内容有没什么好点的书呢
  1. #include"widget.h"
  2. #include"ui_widget.h"
  3. Widget::Widget(QWidget*parent):
  4. QWidget(parent),
  5. ui(newUi::Widget)
  6. {
  7. ui->setupUi(this);
  8. nextBlockSize=0;
  9. bytesWritten=0;
  10. ui->progressBar_main->setMaximum(0);
  11. QFilevfile("version.dat");
  12. if(vfile.open(QIODevice::ReadOnly))
  13. {
  14. QTextStreamstream(&vfile);
  15. version=stream.readLine();
  16. vfile.close();
  17. }
  18. QStringipAdd;
  19. QFilenetfile("net.dat");
  20. if(netfile.open(QIODevice::ReadOnly))
  21. {
  22. QTextStreamstream(&netfile);
  23. ipAdd=stream.readLine();
  24. netfile.close();
  25. }
  26. clientSocket=newQTcpSocket(0);
  27. clientSocket->connectToHost("127.0.0.1",3327);
  28. QObject::connect(clientSocket,SIGNAL(readyRead()),this,SLOT(communicate()));
  29. QObject::connect(clientSocket,SIGNAL(disconnected()),this,SLOT(disconnect()));
  30. }
  31. Widget::~Widget()
  32. {
  33. deleteui;
  34. }
  35. voidWidget::communicate()
  36. {
  37. QDataStreamin(clientSocket);
  38. in.setVersion(QDataStream::Qt_4_0);
  39. //qDebug()<<in;
  40. while(1)
  41. {
  42. intbytes=(int)(clientSocket->bytesAvailable());
  43. bytesWritten+=bytes;
  44. if(ui->progressBar_main->maximum())//maximum()这个函数查不到啊
  45. {
  46. ui->progressBar_main->setValue(bytes);
  47. ui->label_1->setText(QString::number(bytes));
  48. }
  49. if(nextBlockSize==0)
  50. {
  51. if(quint64(bytes)<sizeof(quint64))//quint64这个是什么数据格式呢?是64位的整型?有没相关的文档
  52. {
  53. break;
  54. }
  55. in>>nextBlockSize;
  56. //设置进度条最大值
  57. ui->progressBar_main->setMaximum((int)nextBlockSize);
  58. ui->label_1->setText(QString::number((int)nextBlockSize));
  59. this->show();
  60. }
  61. if(quint64(bytes)<nextBlockSize)
  62. {
  63. break;;
  64. }
  65. //通信协议
  66. quint16 protocol;
  67. in>>protocol;
  68. qDebug()<<"line75/infilewidget.commuicatefunction";
  69. qDebug()<<protocol;
  70. qDebug()<<in;
  71. switch(protocol)
  72. {
  73. case0x0001:
  74. {
  75. in>>version_s;
  76. if(version==version_s)
  77. {
  78. qDebug()<<"thisisthenewestversion.";
  79. qApp->quit();
  80. }
  81. else
  82. {
  83. QByteArrayblock;
  84. QDataStreamout(&block,QIODevice::WriteOnly);
  85. out.setVersion(QDataStream::Qt_4_0);
  86. out<<quint64(0)<<quint16(0x0001);
  87. out.device()->seek(0);//device()-这个函数不是废弃了么?文档上是这样写的啊什么意思呢
  88. out<<quint64(block.size()-sizeof(quint64));
  89. clientSocket->write(block);
  90. }
  91. break;
  92. }
  93. case 0x0002://怎么得出的啊
  94. {
  95. QByteArrayblock1;
  96. QByteArrayblock2;
  97. in>>block1>>block2;//in>>block1是in写入block1,那in>>block1>>block2;是什么意思呢?是不是写入block1后超出的部分写入block2呢?
  98. QFilefile1("MRP.exe");
  99. if(file1.open(QIODevice::WriteOnly)&&block1.length()!=0)
  100. {
  101. file1.write(block1);
  102. file1.close();
  103. }
  104. QFilefile2("common.dll");
  105. if(file2.open(QIODevice::WriteOnly)&&block2.length()!=0)
  106. {
  107. file2.write(block2);
  108. file2.close();
  109. }
  110. QFilewvfile("version.dat");
  111. if(wvfile.open(QIODevice::WriteOnly))
  112. {
  113. wvfile.write(version_s.toUtf8());
  114. wvfile.write("\r\n");
  115. wvfile.close();
  116. }
  117. qDebug()<<"updatesuccessfully.";
  118. QProcess::startDetached("MRP.exe");
  119. qApp->quit();
  120. break;
  121. }
  122. }
  123. nextBlockSize=0;
  124. }
  125. }
  126. voidWidget::disconnect()
  127. {
  128. clientSocket->deleteLater();
  129. QMessageBox::information(this,tr("错误"),tr("网络连接中断!"));
  130. qApp->quit();
  131. };
[ 此帖被wter27在2011-02-15 19:50重新编辑 ]
离线roywillow

只看该作者 1楼 发表于: 2011-02-15
quint64是64位无符号整数,同样的还有quint32,quint16,quint8
如果你看的是例程,里面用到一些废弃的函数也很正常的,谁知道人家例程是在什么版本写的
in>>block1>>block2意思是先读取出来一个block1(看情况应该是一个QByteArray),接着再读取出来下一个QByteArray到block2,应该是没有什么超出之说,你按照block1、block2的顺序写入,读取自然也会按照这个顺序出来
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线wter27
只看该作者 2楼 发表于: 2011-02-15
回 1楼(roywillow) 的帖子
quint64是64位无符号整数,
这个你是怎么知道的呢,我想了解下这些文档应该学习什么。我对数据结构不是很了解。学过的C全忘了
离线roywillow

只看该作者 3楼 发表于: 2011-02-15
文档中可以查到很多的
在QtGlobal的文档中
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线jdwx

只看该作者 4楼 发表于: 2011-02-15
你自己知道应该怎么办?
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
快速回复
限100 字节
 
上一个 下一个