void SysSettingImpl::onAutoStartChange()
{
OI_Q(SysSetting);
int autoStart = _autoStart->currentIndex();
if (autoStart == 0)
{
_isAutoStart = false;
_autoStart->setCurrentIndex(0);
_autoStart->setCurrentText("false");
}
else
{
_isAutoStart = true;
_autoStart->setCurrentIndex(1);
_autoStart->setCurrentText("true");
}
}
在项目中想用currentIndexChanged触发,结果上面这段代码只要触发运行程序就崩了,调试发现一直在里面死循环。
后查资料发现,不管是手动改变combobox的index还是使用函数来设置当前的index都会发出index改变的消息,此时就需要使用关闭信号:
void SysSettingImpl::onAutoStartChange()
{
OI_Q(SysSetting);
int autoStart = _autoStart->currentIndex();
if (autoStart == 0)
{
_isAutoStart = false;
_autoStart->blockSignals(true);
_autoStart->setCurrentIndex(0);
_autoStart->setCurrentText("false");
_autoStart->blockSignals(false);
}
else
{
_isAutoStart = true;
_autoStart->blockSignals(true);
_autoStart->setCurrentIndex(1);
_autoStart->setCurrentText("true");
_autoStart->blockSignals(false);
}
}