QUdpSocket傳輸圖片QImage(QPixmap…


#ifndef SENDER_H
#define 
SENDER_H

#include <QtGui/QWidget>
#include <QUdpSocket>
#include <QLabel>
#include <QPushButton>
#include <QFileDialog>
#include <QBuffer>
#include <QMessageBox>

class Sender : public QWidget
{
Q_OBJECT
private:
QLabel* m_label;
QPushButton* m_browse;
QUdpSocket* m_socket;
const static quint16 port = 6163;
public:
Sender(QWidget *parent = 0);
~Sender();
private slots:
void browse();
};

#endif // 
SENDER_H




#include "widget.h"

Sender::Sender(QWidget *parent)
: QWidget(parent)
{
m_label = new QLabel(this);
m_label->setFixedSize(320,240);
m_label->move(0,0);
m_label->show();

m_browse = new QPushButton("browse",this);
m_browse->setFixedSize(m_browse->sizeHint());
m_browse->move(330,0);
m_browse->show();
connect(m_browse,SIGNAL(clicked()),this,SLOT(browse()));

m_socket = new QUdpSocket(this);
bool result = m_socket->bind(port);
if(!result)
{
QMessageBox::critical(0,"error","Bind Error!");
return;
}
}

Sender::~Sender()
{

}
void Sender::browse()
{
QString path;
QFileDialog* fd = new QFileDialog;
fd->setViewMode(QFileDialog::Detail);
path = fd->getOpenFileName(this,tr("Images"),"./",tr("ImageFiles (*.jpg *.png *.gif *.jpeg)"));


#ifdef Q_OS_WIN32
path.replace("/","\\");
#endif
if ( !path.isEmpty() )
{
m_label->clear();
m_label->setPixmap(QPixmap(path));

QImage image(path);

QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::ReadWrite);
image.save(&buffer, "PNG");
qint64 res;
if((res = m_socket->writeDatagram(ba,QHostAddress::Broadcast,port)) != ba.length())
{
return;            
}
//        QMessageBox::about(0,QString::number(ba.length())+"  "+QString::number(res),ba);
}
}



 
#ifndef RECEIVER_H
#define 
RECEIVER_H

#include <QtGui/QWidget>
 
#include <QUdpSocket>
#include <QLabel>
#include <QMessageBox>

class Receiver : public QWidget
 
{
Q_OBJECT
private:
QLabel* m_label;
QUdpSocket* m_socket;
const static quint16 port = 6163;
public:
Receiver(QWidget *parent = 0);
~Receiver();
private slots:
void readData();
};

#endif // 
RECEIVER_H 



 
#include "widget.h"

Receiver::Receiver(QWidget *parent)
 
: QWidget(parent)
{

this->setFixedSize(640,480);
 
this->move(0,0);
m_label = new QLabel(this);
m_label->setFixedSize(1024,768);
m_label->move(0,0);
m_label->show();

m_socket = new QUdpSocket(this);
 
bool result = m_socket->bind(port);
if(!result)
{
QMessageBox::critical(0,"error","Bind Error!");
return;
}
connect(m_socket,SIGNAL(readyRead()),this,SLOT(readData()));
}

Receiver::~Receiver()
 
{

}
 
void Receiver::readData()
{
while (m_socket->hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(m_socket->pendingDatagramSize());
m_socket->readDatagram(datagram.data(), datagram.size());

QImage image;
 
image.loadFromData(datagram);

QPixmap pm;
 
pm = pm.fromImage(image);
m_label->clear();
m_label->setPixmap(pm);
this->update();
}

}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一个跨平台的应用程序开发框架,可以用来实现各种应用程序的开发,包括图像处理和视频传输等。Qt提供了简单易用的API,使得开发者可以轻松编写网络传输代码。 图片及视频TCP/UDP网络传输使用Qt的QtNetwork模块来实现。通过创建QTcpServer或QUdpSocket对象来监听传入的连接或数据报,使用QTcpSocket或QUdpSocket对象来建立连接或发送数据。可以使用Qt的QImageQPixmap类来处理图像,使用QVideoFrame和QVideoSurface类来处理视频。在使用网络传输时,需要将图像和视频转换成字节流,然后在网络中传输。 为了保证网络传输的可靠性,TCP协议应该被选择。TCP协议提供了重传机制和流量控制,因此可以保证传输的准确性和稳定性。在需要实时传输的情况下,UDP协议应该被选择。UDP协议不提供重传机制和流量控制,但是传输速度更快,因此可以保证传输时延较低。 在Qt中,可以使用QDataStream类来将数据流转换成字节流,然后发送到网络中。接收方可以使用QDataStream类来接收网络中的字节流,并将其转换回原始数据流。接收方可以使用QImageQPixmap、QVideoFrame或QVideoSurface类来处理接收到的图像和视频。 总之,Qt是一个功能强大的跨平台框架,可以用来实现图片和视频的TCP/UDP网络传输。Qt提供了易用的API和丰富的类库,使得开发者可以轻松实现网络传输的代码。在实际应用中,需要根据传输的要求和需求选择合适的TCP或UDP协议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值