【发布时间】:2021-04-24 16:39:17
【问题描述】:
我正在 QT5.13 下开发 QT 应用程序,并且我正在尝试将信号与同一类的插槽连接,因为最终目标是将此类的信号与第二类的插槽连接,但它在这两种情况下都不起作用,所以我尝试在同一个类中验证它,然后再进行第二步。
这是我的代码:
udpserver.h:
#ifndef UDPSERVER_H
#define UDPSERVER_H
#include <QObject>
#include <QUdpSocket>
#include <QDebug>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
class UDPServer : public QObject
{
Q_OBJECT
public:
explicit UDPServer(QObject *parent = nullptr);
QUdpSocket *getSocket() const;
void Send(QString d);
void pMsg(QByteArray App_Msg);
signals:
void ack_gui(QString ack_msg);
public slots:
void readyRead();
void ackRead(QString _ack_msg);
private:
QUdpSocket *socket;
};
#endif // UDPSERVER_H
udpserver.cpp:
#include "udpserver.h"
UDPServer::UDPServer(QObject *parent) : QObject(parent)
{
socket = new QUdpSocket(this);
QTextStream(stdout) << "Socket Server created ! " << endl;
socket->bind(QHostAddress::LocalHost, QT_SERVER_PORT);
connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
connect(socket, SIGNAL(ack_gui(QString)), this, SLOT(ackRead(QString)));
}
QUdpSocket *UDPServer::getSocket() const
{
return socket;
}
void UDPServer::SendData(QString d)
{
keyprod prod1;
QByteArray Data;
QJsonObject Js_command = prod1.ObjectFromString(d);
Data.append(d);
socket->writeDatagram(Data, QHostAddress::LocalHost, PYTHON_SERVER_PORT);
qDebug() << "catch! " << endl;
}
void UDPServer::pMsg(QByteArray App_Msg)
{
QJsonDocument JsonDocument = QJsonDocument::fromJson(App_Msg);
QJsonObject JsonApp_Msg = JsonDocument.object();
QString Typo = JsonApp_Msg["no"].toString();
emit ack_gui(Typo);
}
void UDPServer::readyRead()
{
QByteArray buffer;
buffer.resize(socket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
socket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);
pMsg(buffer);
}
void UDPServer::ackRead(QString _ack_msg)
{
qDebug() << "Message : " << _ack_msg;
}
如你所见,这是一个非常经典的类,在 QT 中没什么复杂的,第一个连接有效,但我使用个人信号的第二个不起作用:
connect(socket, SIGNAL(ack_gui(QString)), this, SLOT(ackRead(QString)));
代码已编译,但当我吃午饭时,我得到了这个:
QObject::connect: No such signal QUdpSocket::ack_gui(QString) in ../../udpserver.cpp
我也尝试了 QT5 中的新连接语法,但没有奏效。
我知道这个话题已经被讨论过好几次了,但我已经检查了这些话题,但仍然没有找到解决方案,请你帮帮我。
提前感谢您的帮助
【问题讨论】:
标签: c++ qt qt5 signals-slots