前面的一篇博客中提到給一個創建了信號槽的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爲假,取消信號阻塞。如果信號被阻塞,被髮射的信號消失在超空間。
實際應用:
ui->deviceComboBox->blockSignals(true);//如果block爲真,阻塞信號,或者如果block爲假,取消信號阻塞。
for(int i = 0; i < supportedDevice->getCount(); i++)
{
DeviceTreeNode const &node = supportedDevice->getItem(i);
qDebug<<QString("%1,%2\n").arg(node.DeviceNumber).arg(node.Description);
QString description = QString::fromWCharArray(node.Description);
ui->deviceComboBox->addItem(description);
}
ui->deviceComboBox->blockSignals(false);//如果block爲真,阻塞信號,或者如果block爲假,取消信號阻塞。