在连接信号时,
QCheckBox::toggled(bool)
和QCheckBox::clicked(bool)
信号有实际区别吗?这两个信号具有相同的签名,将其中一个连接到另一个是否重要?toggled
信号在复选框的检查状态发生变化时被发射,甚至包括通过代码进行更改的情况,而 clicked
信号仅在用户与复选框交互时才被发射,例如:
ui->checkbox->setChecked(true); // toggled() will be emitted, but not clicked()
QCheckBox继承了toggled和clicked两个信号。
void QAbstractButton::clicked ( bool checked = false ) [signal]
void QAbstractButton::toggled ( bool checked ) [signal]
每当可勾选按钮(checkable button)的状态变化时,都会发出该信号。如果按钮被选中,则checked为true;如果未选中,则checked为false。 这可能是用户操作、click()槽函数的调用,或者因为setChecked()方法的调用而引起的状态变化。 在独占按钮组中的按钮状态更新后,此信号将被发出。这意味着槽函数可以响应那些状态已更改的组内按钮所发出的“关”或“开”信号。 例如,可以使用以下模式实现仅对新选中的按钮发出的信号做出反应并忽略已取消选中的按钮的信号的槽函数:
void MyWidget::reactToToggle(bool checked)
{
if (checked) {
// Examine the new button states.
...
}
}
QCheckBox::toggled(bool)
当复选框的状态发生变化时,无论是通过单击还是使用setChecked
或toggle
等方法,都会触发此事件。
QCheckBox::clicked(bool)
当复选框被点击时会触发该事件。也就是说,当用户在复选框上单击并释放鼠标时会触发此事件。还会在输入快捷键或使用click
时触发。复选框不一定必须可选才能触发此事件。
如果您想监听复选框状态变化的时候,请使用toggled
。如果您想监听用户单击复选框的时候,无论是否更改其状态,请使用clicked
。