5

在我的 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;
}
4

1 回答 1

11

将QCheckBox::clicked(bool checked)信号连接到您的插槽:

QCheckBox *cb = new QCheckBox(this);
connect(cb, SIGNAL(clicked(bool)), this, SLOT(toggled(bool)));

如果您调用或setDown(),则不会发出此信号。setChecked()toggle()

于 2013-09-06T10:42:31.247 回答