




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、使用Qt将一系列图片通过网络发送到客户端动态显示实现功能:循环读取服务器端上的10张图片并通过网络发送到客户端,客户端实现动态显示。代码如下:服务器端-cpp view plaincopy1. /*ServerMain.cpp*/ 2. 3. #include "ServerStream.h" 4. #include <QtGui/QApplication> 5. 6. 7. int m
2、ain(int argc,char *argv) 8. 9. QApplication a(argc,argv); 10. ServerStream stream; 11. return a.exec(); 12. cpp view plaincopy1. /*ServerStream.h*/&
3、#160; 2. 3. #ifndef IMAGESERVER_H_ 4. #define IMAGESERVER_H_ 5. 6. #include <iostream> 7. #include <QtNetwork/QHostAddress> 8. #include <QtNetwork/QTcpSocket> 9.
4、 #include <QtNetwork/QTcpServer> 10. #include <QtGui/QImage> 11. #include <QtCore/QThread> 12. #include <QtGui/QWidget> 13. 14. 15. 16. class ServerStream : publ
5、ic QObject 17. Q_OBJECT 18. private: 19. QTcpServer server; 20. QTcpSocket *socket; /socket对象 21. &
6、#160; void initNetWork(); 22. void delay(int len); 23. public: 24. ServerStream(QObject *parent=0); 25. &
7、#160; ServerStream(); 26. QByteArray formHead(QByteArray by); 27. public slots: 28. void dealConnection(); 29. ; 30. &
8、#160; 31. #endif cpp view plaincopy1. /*ServerStream.cpp*/ 2. 3. #include "ServerStream.h" 4. #include <string> 5. #include <QtCore/QFile> 6. #include <QtCore/QThread>
9、160;7. 8. 9. ServerStream:ServerStream(QObject *parent) : QObject(parent) 10. 11. initNetWork(); 12. connect(&server,SIGNAL(newConnection(),this,SLOT(dealConnection();
10、160;13. 14. 15. ServerStream:ServerStream() 16. 17. 18. 19. 20. /初始化网络 21. void ServerStream:initNetWork() 22. std:cout<<"initing network.
11、"<<std:endl; 23. server.setParent(this); 24. server.listen(QHostAddress:Any,8867); 25. std:cout<<"network inited!"<<std:endl; 26.
12、0;27. 28. /当有连接时,将图片发送过去 29. void ServerStream:dealConnection() 30. int num=0; 31. long len=0; 32. socket=server.nextPendingConnection(); 33
13、. for(num=1;num<=10;num+) 34. QFile file("/images/"+QString:number(num)+".jpg"); 35. file.open(QIODevice:ReadOnly);
14、60;/在Qt中,文件需要打开了才能进行操作,这点与java不同 36. QByteArray by; 37. by=file.readAll(); 38. len=by.length();
15、;/获取数据的总长度 39. by.prepend(formHead(QByteArray:number(qlonglong)len); /将要发送的数据总长度加在数据的最前10个字节中,不足的在前面补零。 40. len=socket->write(by); 41.
16、0; socket->flush(); 42. std:cout<<len<<"bytes have been written!"<<std:endl; 43. delay(7000);
17、160; 44. if(num=10) num=1; 45. 46. 47. 48. 49. /将数据长度封装在10个字节的范围内,不足的在前面补零 50. QByteArray ServerStream:formHead(QByteArray by)
18、51. int len=by.length(); 52. int i=0; 53. for(i=10-len;i>0;i-) 54. by=by.prepend('0'); 55.
19、 56. return by; 57. 58. 59. /线程延时不能用,只好用最原始的延时方法了 60. void ServerStream:delay(int len) 61. volatile int m=0; 62. volatile int
20、 n=0; 63. for(m=0;m<len;m+) 64. for(n=0;n<len;n+); 65. 66. 运行效果截图: 客户端-cpp view plaincopy1. /*Main.cpp*/ 2. 3
21、. #include "ImageStream.h" 4. #include <QtGui/QApplication> 5. 6. int main(int argc,char *argv) 7. 8. QApplication a(argc,argv); 9. ImageStream *
22、is=new ImageStream(); 10. is->show(); 11. return a.exec(); 12. cpp view plaincopy1. /*ImageStream.h*/ 2. 3. #ifndef IMAGESTREAM_H_ 4. #define IMAGESTREAM_H_&
23、#160; 5. 6. #include <QtGui/QWidget> 7. #include <QtGui/QLabel> 8. #include <iostream> 9. #include <QtGui/QPalette> 10. #include <QtNetwork/QHostAddress> 11. #in
24、clude <QtNetwork/QTcpSocket> 12. 13. 14. 15. class ImageStream : public QWidget 16. Q_OBJECT 17. private: 18. QHostAd
25、dress hostAddress; /主机地址 19. QTcpSocket client; /socket对象 20. QLabel *ql_show; 21. QByteArray image
26、Data; /存放接收到的图片数据的QByteArray 22. bool hasReadHead; /是否接收到了当前所接收图片的第一个数据包。 23. long avalibleNum; 24. void initN
27、etWork(); 25. public: 26. ImageStream(QWidget *qw=0); 27. ImageStream(); 28. void changeFace(); 29.
28、60; public slots: 30. void getSocketImage(); /获取从服务器端传来的图片数据 31. 32. ; 33. 34. #endif cpp view plaincopy1. /*ImageStream.cpp*/
29、60; 2. 3. #include "ImageStream.h" 4. #include <QtCore/QFile> 5. #include <QtCore/QByteArray> 6. 7. ImageStream:ImageStream(QWidget *qw) : QWidget(qw) 8.
30、60;initNetWork(); 9. this->setGeometry(0,0,500,400); 10. ql_show=new QLabel(this); 11. ql_show->setGeometry(50,50,400,300); 12. ql_show->setAutoFi
31、llBackground(true); 13. hasReadHead=false; 14. avalibleNum=0; 15. 16. 17. 18. ImageStream:ImageStream() 19. 20. 21.
32、160;22. 23. 24. 25. /当有数据包发送来时,解析第一个数据包并获取所有数据包的总长度,获取的第二个以上的数据包不做此处理。 26. void ImageStream:getSocketImage() 27. if(!hasReadHead) 28. imageData.clear(); /第
33、一个数据包发来时,先清空存储图片数据的空间 29. QByteArray by=client.readAll(); 30. avalibleNum=by.left(10).toLong(); /找出第一个数据包的前10个字节,由此获得数据总长度。 31.
34、60; by.remove(0,10); /移除前10个字节 32. imageData.append(by); 33. hasReadHead=true; 34. if(imageData.length()>=avalibleNum) /判断数
35、据是否接收完毕 35. std:cout<<"receive a image,length="<<avalibleNum<<std:endl; 36. changeFace(); 37.
36、60; hasReadHead=false; 38. 39. else 40. QByteArray by=client.readAll(); 41. imageData.append(by);
37、0; 42. if(imageData.length()>=avalibleNum) /判断数据是否接收完毕 43. std:cout<<"receive a image,length="<<avalibleNum<<std:endl; 44. changeFace(); 45. hasReadHead=false;&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车离合器检测设备项目可行性研究报告评审方案设计2025年标准
- 2024-2025年中国3D网上购物行业发展潜力分析及投资战略咨询报告
- 中国皮革面层涂饰剂项目投资可行性研究报告
- 2025年君子鱼项目投资可行性研究分析报告
- 住宅分销合同范本
- 中国河南省写字楼租售行业发展运行现状及投资战略规划报告
- 中国热熔胶纤维状涂胶枪项目投资可行性研究报告
- 中国音频节目播控设备行业发展运行现状及投资潜力预测报告
- 中国激光气体分析仪行业发展监测及市场发展潜力预测报告
- 中国太阳能电池设备行业全景评估及投资规划建议报告
- 第59讲-热重曲线分析(课件)
- 陪诊服务项目计划书
- Unit7ArtLesson2BeijingOpera课件高中英语北师版
- 2023高考语文文言文复习:《说苑》练习题(含答案解析)
- 低血糖健康宣教
- 《炼油化工基本知识》课件
- 关于高中语文教学中“微课”的运用分析获奖科研报告论文
- 《射频同轴电缆》课件2
- 以工代赈政策培训课件
- 垃圾分类校本教材
- 中职学生开学心理知识讲座
评论
0/150
提交评论