当前位置: 代码迷 >> QT开发 >> TCP传输图片 为什么会受到QMessageBox的影响,该如何解决
  详细解决方案

TCP传输图片 为什么会受到QMessageBox的影响,该如何解决

热度:110   发布时间:2016-04-25 05:03:18.0
TCP传输图片 为什么会受到QMessageBox的影响
我在写了个小程序 ,就是在两台计算机上TCP传输图片:服务器一直监听端口,如果客户端连接,服务器就向客户端发送一张JPG图片,然后客户端接收后显示出来。中间却遇到了一个实在搞不明白的问题,客户端主要程序如下:

MainWindow::MainWindow(QWidget *parent)
  : QMainWindow(parent)
{
  mySocket = new QTcpSocket(this);
  connect(mySocket,SIGNAL(readyRead()),this,SLOT(if_finished()));
  mySocket->connectToHost("59.64.147.32",
  9988);

}

MainWindow::~MainWindow()
{
   
}

void MainWindow::if_finished()
{

  if(mySocket->bytesAvailable() < image->height()*image->width()*3)
  {

  return;
  }
  else
  getImage();
   

}
void MainWindow::getImage()
{


  image = new QImage( "" );//c:\\TEST.jpg

  QMessageBox::information( 0,"infor","finished"); //为什么这行去掉了 ,就显示不出来图片了:界面停顿下就不见了,没有看到图片。这句话如果存在,弹出来以后点击一下finished 图片就弹出来了。求解为什么?
  QDataStream in(mySocket);

  in >> (*image);
  // setText( "" );
  label=new QLabel(this);
  label->setPixmap(QPixmap::fromImage(*image));
  //label->move(50,5);
  resize( image->size() );
  label->resize( image->size() );

  label->show();

}

小弟实在不明白 求大牛指点 为啥 图片显示和QMessageBox有关系了? 难道是我的程序有BUG?

------解决方案--------------------
下面是我写的一些方法 你可以参照一下 或许会有些小提醒...
/************************************************************************/
/* 方法一: 将图片保存下来 然后直接显示保存的图片 */
/************************************************************************/
/*QByteArray data=tcpSocket->readAll();
fileName="C:/image.jpg";
QFile file(fileName);

if(file.open(QIODevice::WriteOnly | QIODevice::Append))


file.write(data);

QPixmap * pixmap=new QPixmap(fileName);

QPixmap pix=pixmap->scaled(label->size());

label->setPixmap(pix);
label->show();
file.close();*/
/************************************************************************/
/* 第二种方法 直接接收显示服务器发送的 图片 */
/************************************************************************/
QByteArray temp=tcpSocket->readAll();//读取图片的所有字节
if(!temp.contains("####"))//判断是否接收到####字符没有的话就直接追加给data
{
data.append(temp);
}else // 有的话 就截取字符 然后追加给data
{
temp=temp.mid(0,temp.length()-4);
data.append(temp);

QImage image((uchar*)data.data(),100,100,QImage::Format_ARGB32);// 开辟一个新的图片

QPixmap pixmap=QPixmap::fromImage(image);

QPixmap pix=pixmap.scaled(label->size());
label->setPixmap(pix);
label->show();
}
------解决方案--------------------
也就是说
C/C++ code
if(mySocket->bytesAvailable() < image->height()*image->width()*3){    return;}