当前位置: 代码迷 >> QT开发 >> qt 发射信号,槽接收不到这是咋回事,各位大神求指导
  详细解决方案

qt 发射信号,槽接收不到这是咋回事,各位大神求指导

热度:550   发布时间:2016-04-25 02:55:42.0
qt 发射信号,槽接收不到这是怎么回事,各位大神求指导
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类中,具体原因我也说不清楚。你这样试试看
------解决思路----------------------
搞明白了你再写代码。看了一遍,没看明白你要写什么,很乱。
  相关解决方案