嵌入式大本营
2021-04-28 17:00
采纳率: 100%
浏览 178

qt里面槽函数有时响应,有时不响应?

遇到一个非常玄学的问题,我写的一个qt程序,简单的一个信号触发一个槽函数,但是我发现同样的代码在多次运行的情况下有时会触发槽函数,有时不会触发,完全毫无规律。

这是我简化后的代码,qDebug每次都可以打印,说明有执行,然后触发一个信号

void MonitorWidget::doprocess_receivemessage(QMQTT::Message message)
{
    
    static int i=0;
    if(i++%2==0)
    {
        qDebug("%s,  %d\n",__FUNCTION__,__LINE__);
        emit  this->ali_beep_on();

    }
    else {
        qDebug("%s,  %d\n",__FUNCTION__,__LINE__);
        emit  this->ali_beep_off();
    }
}

这是信号绑定槽函数

    connect(this->monitor,&MonitorWidget::ali_beep_on,this,&MainWindow::tempIsTooHigh_slot);
    connect(this->monitor,&MonitorWidget::ali_beep_off,this,&MainWindow::tempIsNormal_slot);

这是槽函数,槽函数里的qDebug有时会打印,有时不打印,说明槽函数有时不被执行

void MainWindow::tempIsTooHigh_slot()
{
    qDebug("%s,  %d\n",__FUNCTION__,__LINE__);
    emit tempIsTooHigh();
}

void MainWindow::tempIsNormal_slot()
{
    qDebug("%s,  %d\n",__FUNCTION__,__LINE__);
    emit tempIsNormal();
}

但是我在根本没有改变代码的情况下,执行结果却会不一样,这是什么原因呢?已经试过将编译优化降到最低了,但是没什么用

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • CSDN专家-黄老师 2021-04-28 17:11
    已采纳

    检测一下是否有阻塞,很可能是执行部分业务逻辑的代码出现问题

    已采纳该答案
    打赏 评论
  • 嵌入式大本营 2021-04-28 18:25
    void MonitorWidget::doprocess_receivemessage(QMQTT::Message message)
    {
        static int i=0;                  //这个槽函数是通过手机下发信号进入的
        if(i++%2==0)
        {
            qDebug("%s,  %d\n",__FUNCTION__,__LINE__);  //这句总是可以执行
            emit  this->ali_beep_on();                  //触发信号
        }
        else {
            qDebug("%s,  %d\n",__FUNCTION__,__LINE__);
            emit  this->ali_beep_off();
        }
    }
    
    
    void MainWindow::tempIsTooHigh_slot()         //这个是槽函数,有时执行有时不执行
    {
        qDebug("%s,  %d\n",__FUNCTION__,__LINE__);     //有时打印,有时不打印
        
    }
    
    但是如果通过按钮来触发emit  this->ali_beep_on(); 
    那么上面槽函数总是可以执行
    
    打赏 评论
  • 有问必答小助手 2021-04-28 18:37

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    打赏 评论
  • 有问必答小助手 2021-04-29 19:14

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

    速戳参与调研>>>https://t.csdnimg.cn/Kf0y

    打赏 评论

相关推荐 更多相似问题