信号与槽函数采用直连的关联方式,有时候启动程序后槽函数会响应,有时候启动程序后不响应;
比如本次启动程序后,槽函数就一直不响应,重启程序后又有响应了;
并且是程序启动后一直都没有响应;
偶发性,有时候程序启动后槽函数有效,有时候启动程序后槽函数无效
一开始以为是关联失败的问题,但是判断关联的返回值是成功的
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);
}
很可能是点击过快,上一个点击还没执行完,你在代码里设置一下,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