Qt信号和插槽有问题

时间:2013-12-16 18:00:56

标签: c++ qt signals-slots

我有2个班级:

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);
};

在Server类中我有信号:

void RecieveMessage(QString);

在ChessLanTEst课程中我有插槽:

   void ShowMessage(QString);

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

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

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

2 个答案:

答案 0 :(得分:3)

基于注释,您在server_之前发出构造函数,之前 connect(因为如果server_指针中有有效值,构造函数已返回)。

发送自己不会排队,必须在发出之前完成连接才能调用插槽(或排队的呼叫)。

答案 1 :(得分:2)

您需要使用SIGNAL和SLOT宏。像:

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

如果您搜索这些宏的定义,您会发现参数实际上已转换为字符串。