Qt connect信号槽多次定义,会多次触发槽函数

问题描述:
点击Websocket【连接】按钮的时候将open连接到指定的地址,websocket在连接成功后会发出 connected信号;同时我们在初始化的时候就将,connected信号和我们的onconnected()函数建立连接;

onconnected()函数,用于将接收到新的消息和我们的接收消息处理的槽函数绑定起来,以及做一些连接后的处理工作;

void CWebSocketTool::innit()
{
    //初始化创建的连接,是否应该放到一List上去存储?
    connect(m_webSocket, &QWebSocket::connected, this, &CWebSocketTool::onConnected);
    connect(m_webSocket, &QWebSocket::disconnected, this, &CWebSocketTool::closed);
 

}

void CWebSocketTool::onConnected()
{
    //这里不应该为true,因为握手了并不代表认证成功
    //m_connectstatu = true;
       connect(m_webSocket, &QWebSocket::textMessageReceived,this, &CWebSocketTool::onTextMessageReceived);
}

注意上面这个onconnected()函数实现的功能:
每次调用这个函数的时候,就会重新连接一次信号槽。

多次点击Websocket【连接】按钮,每次都连接成功的情况下。会多次执行onconnected()函数,导致创建多个信号与槽函数的连接

当后面连接成功后,通过websocket接收到新消息,触发 textMessageReceived信号,接收到一条消息会多次触发  onTextMessageRecevied 函数。

修改之后

void CWebSocketTool::innit()
{
    //初始化创建的连接,是否应该放到一List上去存储?
    connect(m_webSocket, &QWebSocket::connected, this, &CWebSocketTool::onConnected);
    connect(m_webSocket, &QWebSocket::disconnected, this, &CWebSocketTool::closed);

    connect(m_webSocket, &QWebSocket::textMessageReceived,this, &CWebSocketTool::onTextMessageReceived);
}

void CWebSocketTool::onConnected()
{
    //这里不应该为true,因为握手了并不代表认证成功
    //m_connectstatu = true;

}

将connect建立部分,放到初始化部分,只实例化时调用一次,避免了多次创建connect信号与槽的问题

其实问题的根本原因:就是要避免多次创建信号与槽。 多了解一下信号与槽的建立机制,或者在使用的时候,加上限制参数

connect(m_webSocket, &QWebSocket::textMessageReceived,this, &Widget::onTextMessageReceived,Qt::UniqueConnection);

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值