槽函数有时候不响应信号

信号与槽函数采用直连的关联方式,有时候启动程序后槽函数会响应,有时候启动程序后不响应;
比如本次启动程序后,槽函数就一直不响应,重启程序后又有响应了;
并且是程序启动后一直都没有响应;
偶发性,有时候程序启动后槽函数有效,有时候启动程序后槽函数无效
一开始以为是关联失败的问题,但是判断关联的返回值是成功的

问题相关代码

qRegisterMetaType("BottleStatus");
res = connect(item,&SysStatus::psolvent,this, &ProcessAllCmd::pSolvent,Qt::DirectConnection);
if(!res){
qDebug() << "psolvent 关联失败!退出程序";
ExitProcess(0);
}

SysStatus *SysStatus::getInstance()
{
    if(nullptr == m_sysStatus){
        //QMutexLocker locker(&m_sysMutex);
        if(nullptr == m_sysStatus){
            m_sysStatus = new SysStatus;
        }
    }
    return m_sysStatus;
}

其中 m_sysStatus 是静态变量

SysStatus* item = SysStatus::getInstance();

qRegisterMetaType<BottleStatus>("BottleStatus");
res = connect(item,&SysStatus::psolvent,this, &ProcessAllCmd::pSolvent,Qt::DirectConnection);
if(!res){
qDebug() << "psolvent 关联失败!退出程序";
ExitProcess(0);
}


img


换个连接方式吧,你这看起来像是把自定义的CMD线程和系统主线程通信,应该是多线程了吧

很可能是点击过快,上一个点击还没执行完,你在代码里设置一下,xxx是按钮名称

xxx.RefreshButton->setEnabled(false);
qRegisterMetaType("BottleStatus");
res = connect(item,&SysStatus::psolvent,this, &ProcessAllCmd::pSolvent,Qt::DirectConnection);
if(!res){
qDebug() << "psolvent 关联失败!退出程序";
ExitProcess(0);
}
    xxx.RefreshButton->setEnabled(true);

其它方面:
检测一下是否有阻塞,很可能是执行部分业务逻辑的代码出现问题
可以试试最笨方法,整个程序将每一行代码都加个print,不触发的时候,看看程序在那里停止了
在槽函数里面也写print