




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村土地整治及利用合作合同
- 保险培训班务体系介绍
- 跳舞私教合同协议范本
- 辞快工协议合同
- 送文化下乡演出合同协议
- 郊区公寓租赁协议书模板
- 运煤车租赁合同协议
- 配赠独立车库合同协议
- 云计算数据中心能耗优化协议
- 跨州追捕协议书范本
- GA/T 1093-2023安全防范人脸识别应用出入口控制人脸识别技术要求
- 港口危货作业单位主要安全管理人员试题及答案(536道)
- 教师职业道德与教育法律法规
- 2024年监理工程师考试《三控》真题与答案
- 汽车制造工艺与自动化检测过程自动化课件
- 2024年天津市初中地理学业考查试卷
- 《电工安全操作规范》课件
- VW-Formel-Q审核提问表(完整版)
- 建筑施工与管理专业毕业实习实施细则
- 卧床患者常见并发症护理专家共识
- 管理干部安全生产培训课件
评论
0/150
提交评论