QCheckBox::toggled() 和 QCheckBox::clicked() 有什么区别?

31
在连接信号时,QCheckBox::toggled(bool)QCheckBox::clicked(bool)信号有实际区别吗?这两个信号具有相同的签名,将其中一个连接到另一个是否重要?
3个回答

56

toggled 信号在复选框的检查状态发生变化时被发射,甚至包括通过代码进行更改的情况,而 clicked 信号仅在用户与复选框交互时才被发射,例如:

ui->checkbox->setChecked(true);  // toggled() will be emitted, but not clicked()

7

QCheckBox继承了toggled和clicked两个信号。

void QAbstractButton::clicked ( bool checked = false ) [signal]

当按钮被激活(即在鼠标光标位于按钮内按下并释放),快捷键被键入,或调用click()或animateClick()时,会发出此信号。值得注意的是,如果调用setDown()、setChecked()或toggle(),则不会发出此信号。 如果按钮可选中,则如果按钮已选中,则checked为true,否则为false。
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.
       ...
    }
 }

http://qt-project.org/doc/qt-4.8/qcheckbox.html


3
QCheckBox::toggled(bool)

当复选框的状态发生变化时,无论是通过单击还是使用setCheckedtoggle等方法,都会触发此事件。

QCheckBox::clicked(bool)

当复选框被点击时会触发该事件。也就是说,当用户在复选框上单击并释放鼠标时会触发此事件。还会在输入快捷键或使用click时触发。复选框不一定必须可选才能触发此事件。

如果您想监听复选框状态变化的时候,请使用toggled。如果您想监听用户单击复选框的时候,无论是否更改其状态,请使用clicked


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接