在我的Qt应用程序中,我想使用一个复选框在切换为未选中时执行A,并在切换到选中时执行B.该复选框挂钩到foo(int)。
connect(myCB, SIGNAL(stateChanged(int)), this, SLOT(foo(int)));
当完整性检查失败时出现问题(例如,某些变量得到无效值),我只想显示错误消息并保持一切不变。所以我再次切换复选框以将其恢复到原来的位置。但似乎这个动作会再次触发回调函数foo(int),这会弄乱一切。我不希望它在这种情况下触发回调。我应该怎么做?或者,还有更好的方法?请参阅下面的伪代码。
void foo(int checkState)
{
if (checkState == Qt::Unchecked) {
if (!passSanityCheck()) {
// show error message
checkBoxHandle->toggle();
return;
}
// do A when it's unchecked
}
else {
if (!passSanityCheck()) {
// show error message
checkBoxHandle->toggle();
return;
}
// do B when it's checked
}
return;
}
答案 0 :(得分:8)
将QCheckBox::clicked(bool checked)信号连接到您的广告位:
QCheckBox *cb = new QCheckBox(this);
connect(cb, SIGNAL(clicked(bool)), this, SLOT(toggled(bool)));
如果您拨打setDown()
,setChecked()
或toggle()
,则不会发出此信号。