Qt 发送一次信号触发多次槽函数的解决方法

现象

      做网络通信编写信号与槽,测试发现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 发送一次信号触发多次槽函数的解决方法_第1张图片

      即新增,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()));

      重新测试后,正常

你可能感兴趣的:(Qt)