udpsocketreceiver.h文件
#ifndef UDPSOCKETRECEIVER_H
#define UDPSOCKETRECEIVER_H
#include <QObject>
class QUdpSocket;
class udpsocketreceiver : public QObject
{
Q_OBJECT
public:
explicit udpsocketreceiver(QObject *parent = 0);
signals:
void message(QByteArray);
public slots:
void processPendingDatagram();
private:
QUdpSocket *receiver;
int port;
};
#endif // UDPSOCKETRECEIVER_H
#include "udpsocketreceiver.h"
#include<QDebug>
#include<QtNetwork>
udpsocketreceiver::udpsocketreceiver(QObject *parent) :
QObject(parent)
{
port=5555;
receiver = new QUdpSocket(this);
receiver->bind(port, QUdpSocket::ShareAddress);
connect(receiver, SIGNAL(readyRead()), this, SLOT(processPendingDatagram()));
}
void udpsocketreceiver::processPendingDatagram()
{
while(receiver->hasPendingDatagrams())
{
QByteArray datagram;
datagram.resize(receiver->pendingDatagramSize());
receiver->readDatagram(datagram.data(), datagram.size());
// qDebug()<<"re"<<datagram;
emit message(datagram);
}
}
#ifndef COMMAND_H
#define COMMAND_H
#include <QObject>
class command : public QObject
{
Q_OBJECT
public:
explicit command(QObject *parent = 0);
signals:
void request_discover(QByteArray);
public slots:
private slots:
void get_message(QByteArray client_message);
private:
QByteArray receiver_message;
};
#endif // COMMAND_H
#include "command.h"
#include"udpsocketreceiver.h"
#include<QDebug>
command::command(QObject *parent) :
QObject(parent)
{
udpsocketreceiver *receiver=new udpsocketreceiver();
connect(receiver,SIGNAL(message(QByteArray)),this,SLOT(get_message(QByteArray)));
}
void command::get_message(QByteArray client_message)
{
receiver_message=client_message;
qDebug()<<"command"<<receiver_message;
if(receiver_message.at(0)==1)
{
emit request_discover(receiver_message);
}
if(receiver_message.at(0)==3)
{
}
}
get_message不能接收到udpscoketreceiver 发送的信号, 调试的时候没有跳转到get_message,这是怎么回事,请各位大神指教
------解决思路----------------------
lz,你应该把信号与槽连接写在udpsocketreceiver类中,具体原因我也说不清楚。你这样试试看
------解决思路----------------------
搞明白了你再写代码。看了一遍,没看明白你要写什么,很乱。