Qt信号和插槽故障

Qt signals and slots trouble

本文关键字:故障 插槽 信号 Qt      更新时间:2023-10-16

我有两个类:

class Server : public QTcpServer
{
Q_OBJECT
public:
Server(QObject * parent = 0 , quint16 port = 1922);
void SendData(QString data);
virtual ~Server();
signals:
void RecieveMessage(QString);
private slots:
void acceptConnection();
void startRead();
void disconnected();
private:
QTcpServer *tcpServer;
QTcpSocket *client;
};

class ChessLanTEst : public QMainWindow
{
Q_OBJECT
public:
friend class Server;
friend class Client;
ChessLanTEst(QWidget *parent = 0);
~ChessLanTEst();
private:
Ui::ChessLanTEstClass ui;
Server *server_;
Client *client_;
private slots:
void createGame();
void ShowMessage(QString);
};

在服务器类中,我有信号:

void RecieveMessage(QString);

在ChessLanTE我有一个空位:

   void ShowMessage(QString);

我在ChessLanTEst构造函数中连接了它

connect(server_, &Server::RecieveMessage, this, &ChessLanTEst::ShowMessage); 

但我没有收到这个信号,也不知道为什么。

根据注释,在server_的构造函数中发出,在执行connect之前发出(因为如果server_指针中有有效值,则构造函数已返回)。

发射本身从来没有排队,必须在发射之前完成连接才能调用插槽(或排队的调用)。

您需要使用SIGNAL和SLOT宏。类似:

connect(server_, SIGNAL(RecieveMessage(QString)), this, SLOT(ShowMessage(QString)));

如果你搜索这些宏的定义,你会发现这些参数实际上被转换成了字符串。