QComboBox的currentIndexChanged死循环问题

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);
            }
        }

 

你可能感兴趣的:(QT)