现象
做网络通信编写信号与槽,测试发现socket连接时,触发了多次槽函数,导致出现了多个连接socket的异常情况。
这样的现象还有很多,比如,我有个页面,利用信号槽机制,通过按键点击来打开,如果我连续多次点击按键,就会出现多个界面。
解决办法
方法1:修改连接方式
将
connect(&net_dlg, SIGNAL(Send_Net_Signals()), this, SLOT(Recv_Net_Slots()));
修改为
connect(&net_dlg, SIGNAL(Send_Net_Signals()),
this,SLOT(Recv_Net_Data_Slots()),Qt::UniqueConnection);
即新增,Qt::UniqueConnection条件,防止重复连接,连接过一次就不再做相同的连接了
方法2:修改连接逻辑
先断开之前的连接,再重新再连接;
disconnect(&net_dlg, SIGNAL(Send_Net_Signals()), this, SLOT(Recv_Net_Slots()));
connect(&net_dlg, SIGNAL(Send_Net_Signals()), this, SLOT(Recv_Net_Slots()));
重新测试后,正常