我们知道,tcp网络编程发送数据是利用套接字来实现,将要传输的东西转化为数据流再进行传输,为了确保数据传输的准确性和安全性,我们在发送数据流前发送一个quint32的常量来表示所要发送的数据的大小;当我们要发送图片时,最关键的是获得图片的大小:

QBuffer buffer;

QPixmap(":/images/1.png").save(&buffer,"BMP");

知道了图片的大小就可以传输图片了;发送端:

QDataStream stream( &data, QIODevice::WriteOnly );
  stream.setVersion( QDataStream::Qt_4_0 );
  stream << (quint32)buffer.data().size();
  data.append( buffer.data() );

tcpSocket->write(data);

data.resize(0);

接收端:
int dataSize;

while(socket.byteAvaileble() > 0 )

{

if( dataSize == 0 )
  {
    QDataStream stream( &socket );
    stream.setVersion( QDataStream::Qt_4_0 );
  
    if( socket.bytesAvailable() < sizeof(quint32) )
      return;
      
    stream >> dataSize; //获取接受到的数据大小
  }
  
  if( dataSize > socket.bytesAvailable() )
    return;

QByteArray array = socket.read( dataSize );
  QBuffer buffer(&array);
  buffer.open( QIODevice::ReadOnly );
  
  QImageReader reader(&buffer, "PNG");
  QImage image = reader.read();

if( !image.isNull() )
  {
    ui.imageLabel->setPixmap( QPixmap::fromImage( image ) );
    ui.imageLabel->setText( tr("") );
   dataSize=0;
  }
  else
  {
  }

}

原文地址:http://blog.csdn.net/hsl17/article/details/6739171

[转] - 如何用QTcpSocket传送图片的更多相关文章

  1. 【问题收集·中级】关于XMPP使用Base传送图片

    [问题收集·中级]关于XMPP使用Base传送图片 下面是我与博友的问答过程:并在最后链接附录了相应的文件: 博友问题:  16:35:38 他跟我说要 内容图片  base64编码 上传..博友问题 ...

  2. 如何用photoshop把图片白色背景变成透明?

    1.当提示配置文件丢失时,选择“指定RGB模式”. 2.Ctrl+J是一个复合动作,复制+新建,会得到一个新图层. 3.选中新图层,点击鼠标左边工具条里面的魔棒工具,再用鼠标点击下图片的某处白色部分, ...

  3. 如何用BMFont制作图片字

    1: 运行程序,单击鼠标左键点亮相应位置的字母,比如:0.1.2./ 等2: 选择 Edit->Open Image Manager.弹出一个“Image Manager" 对话框3: ...

  4. 如何用Jquery做图片展示效果

    一. 前言 到底用JQuery做出怎样的展示效果? 让我们先来看一下!网页加载时,如图所示: 二.本人思路 这个效果初学者看起来好像有点复杂,其实不太难,关键是理清思路,从后端的数据库中找出我们要展示 ...

  5. url传送图片的base64编码给web客户端

    base64编码图片: #python3.6 import base64 with open("./aa.jpg", "rb") as f: data = ba ...

  6. 如何用java实现图片与base64转换

    如果你是一个软件开发,不论前端后端工程师,图片的处理你是肯定要会的,关于图片的Base64编码,你可能有点陌生,但是这是一个软件工程师应该要掌握的知识点,现在很多网友把图片与base64转换都做成了小 ...

  7. 如何用python裁剪图片

    如何使用python裁剪图片 如上图所示,这是一张包含了各类象棋棋子的图片.我们需要将其中每一个棋子都裁剪出来,此时可以利用python的 PIL库 实现. 一. 安装PIL库 如果此前没有安装过PI ...

  8. 如何用 matlab 在图片上绘制矩形框 和 添加文字 ?

    如何给图像添加矩形框?以及添加想要输入的文字 ? 案例程序,如下所示: clc; close all; clear all;image = imread('/home/wangxiao/Picture ...

  9. css背景图片拉伸 以及100% 满屏显示

    如何用css背景图片拉伸 以及100% 满屏显示呢?这个问题听起来似乎很简单.但是很遗憾的告诉大家.不是我们想的那么简单. 比如一个容器(body,div,span)中设定一个背景.这个背景的长宽值在 ...

随机推荐

  1. iOS8 UILocalNotification 和 UIRemoteNotification 使用注意 草稿,正在整理中。。。。

    先说一个关于UILocalNotification的知识点,容易被忘记: Each app on a device is limited to 64 scheduled local notificat ...

  2. Android 启动画面

    如果你的程序初始化时间过长,那么在初始化之前,程序会现实一个空白的activity页,十分难看. 添加一个启动画面的方法就是为响应的activity加入自定义的Theme,并在theme中设定 and ...

  3. jQuery ajax跨域请求的解决方法

    在Ajax应用中,jQuery的Ajax请求是非常容易而且方便的,但是初学者经常会犯一个错误,那就是Ajax请求的url不是本地或者同一个服务器下面的URI,最后导致虽然请求200,但是不会返回任何数 ...

  4. Java for LeetCode 040 Combination Sum II

    Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...

  5. 到天宫做客-最后一分钟AC!!!

    问题 C: 到天宫做客 时间限制: 1 Sec  内存限制: 128 MB提交: 100  解决: 26[提交][状态][讨论版] 题目描述 有一天,我做了个梦,梦见我很荣幸的接到了猪八戒的邀请,到天 ...

  6. codeforces B. Simple Molecules 解题报告

    题目链接:http://codeforces.com/problemset/problem/344/B 题目意思:这句话是解题的关键: The number of bonds of an atom i ...

  7. DOS 循环读取txt每一行内容

    在命令行窗口中输入: for /f %i in (f:\mydata.txt) do echo %i 如果要是写成批处理文件run.bat for /f %%i in (f:\mydata.txt) ...

  8. 归并排序(merge sort)

    M erge sort is based on the divide-and-conquer paradigm. Its worst-case running time has a lower ord ...

  9. callsession新功能版

    可以getopt解析参数. 也实现了将参数用空格分隔,来传给进程. 注意string和LPSTR数据类型的转换方法: LPSTR(lpCmdLine.c_str()) #include <win ...

  10. Android Studio打包未签名包

    Android Studio打包未签名包 好久没有写技术博客了,真有点懈怠了,作为35岁的程序员,转行重新捡起这些知识,还是挺犹豫纠结的,不过没啥其它办法,一点一滴开始吧,今天这开篇就小结点前几天工作 ...