远程桌面共享

Black学Qt+远程桌面共享

2019-03-11 10:56:25 PastaRiga 阅读数 199

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/PastaRiga/article/details/88389876

#桌面共享#
实现一个软件,主机A与主机B之间进行通信,主机A将其桌面共享给主机B

分析

  1. 主机A与主机B通信,主机A为服务器,主机B为客户端,A向B实时发送A自己的桌面
  2. 服务器没有显示界面
  3. 客户端有显示界面,显示界面显示服务器发送过来的桌面数据
  4. 客户端应尽量做到显示流畅,中间不存在较大的滞后,闪烁

大致思路:

  • 实现两个主机之间的通信,利用TCP方法
  • 获取桌面
  • 将桌面发送过去

愿景

  • 再将这个软件深入,做到像TIM中的“远程桌面”一样,主机A将桌面发送给主机B后,主机B能够在自己的桌面中控制主机A

具体过程

  • Day_0
    实现抓取桌面,获得一张桌面图片
  • Day_1
    实现两机之间的通信
  • Day_2
  • Day_3
  • Day_4
  • Day_5
  • Day_6
  • Day_7
  • Day_8
  • Day_9
  • Day_10

遇到的问题

  1. 如何将QPixmap文件保存到文件中

     QPixmap m_pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());//抓取当前窗口图片
     m_pixmap.save("myDesktop.bmp","BMP");//保存图片,格式为.bmp
    
    • 1
    • 2
  2. 如何将QPixmap文件转换为二进制数据

     QPixmap m_pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
     m_pixmap.save("m_pixmap","BMP");
    
     QByteArray myArray;
     QBuffer buffer(&myArray);
     buffer.open(QIODevice::WriteOnly);
     m_pixmap.save(&buffer,"BMP");
    
     QFile picture("picture.bmp");
     picture.open(QIODevice::WriteOnly | QIODevice::ReadOnly);
     picture.flush();
     QDataStream out(&picture);
     for(int i = 0;i<myArray.size();i++){
         out<<(quint8)myArray[i];
     }
     picture.close();
    
  3. Pixmap抓取到的屏幕截图达到3M,使用TcpSocket发送过去需要2s多的时间,造成存在较大滞后,实际显示变成了一张一张的图片更新
    考虑解决方法:1、考虑使用QuaZip将图片压缩后进行传送,接收端接收到之后再进行解压显示。2、将图片本身大小进行更改,但这样会明显改变图片的清晰度。3、使用另一种网络传输协议,尽可能地提高数据的传输速度。
    另外,Windows10中的画图板中,能够将.bmp格式的图片转化为.jpg格式的图片,实际能将3M的大小转化为100多KB字节大小,在这种大幅降低图片内存大小的情况下却没有对清晰度造成大幅的破坏,值得去找一找它的实现机制。

  4. 显示界面与后台数据的接收之间的冲突,后台数据的不断接收会造成显示界面的按钮无法实时响应,窗口本身也无法立即关闭。
    考虑使用多线程解决。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值