前面的一篇博客中提到給一個創建了信號槽的ComboBox添加或去除Item時采用的方法是在對該ComboBox操作前先使用disconn函數將信號槽先切斷,操作好后在connect。
今天發現有另一種解決方法,就是使用blockSignals函數。
該函數的原型:bool QObject::blockSignals(bool block)
官方解釋:If block is true, signals emitted by this object are blocked (i.e., emitting a signal will not invoke anything connected to it). If block is false, no such blocking will occur.
理解:如果block為真,阻塞信號,或者如果block為假,取消信號阻塞。如果信號被阻塞,被發射的信號消失在超空間。
實際應用:
1 ui->deviceComboBox->blockSignals(true);//如果block為真,阻塞信號,或者如果block為假,取消信號阻塞。
2 for(int i = 0; i < supportedDevice->getCount(); i++) 3 { 4 DeviceTreeNode const &node = supportedDevice->getItem(i); 5 qDebug<<QString("%1,%2\n").arg(node.DeviceNumber).arg(node.Description); 6 QString description = QString::fromWCharArray(node.Description); 7 ui->deviceComboBox->addItem(description); 8 } 9 ui->deviceComboBox->blockSignals(false);//如果block為真,阻塞信號,或者如果block為假,取消信號阻塞。