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

时间:2013-03-22 12:32:17

标签: c++ qt

QCheckBox::toggled(bool)QCheckBox::clicked(bool)信号之间是否存在实际差异?两者都有相同的签名,我连接哪一个都很重要?

3 个答案:

答案 0 :(得分:48)

每次复选框的检查状态发生变化时都会发出toggled信号,即使它通过代码更改,而clicked信号仅在用户与复选框交互时才会发出,例如:

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

答案 1 :(得分:7)

QCheckBox继承切换并单击。

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

当按钮被激活(即按下然后在鼠标光标位于按钮内部时释放),键入快捷键或调用click()或animateClick()时,会发出此信号。值得注意的是,如果调用setDown(),setChecked()或toggle(),则不会发出此信号。 如果按钮是可检查的,如果选中该按钮则检查为true,如果未选中该按钮则检查为false。

void QAbstractButton::toggled ( bool checked ) [signal]

只要可检查按钮改变其状态,就会发出此信号。如果选中该按钮,则为true;如果未选中该按钮,则为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

答案 2 :(得分:3)

QCheckBox::toggled(bool)

当复选框更改其状态时发出,无论是通过点击它还是使用setCheckedtoggle等等。

QCheckBox::clicked(bool)

单击复选框时发出。也就是说,当用户点击并释放复选框时。键入快捷键或使用click时也会发生。复选框不一定必须是可以检查的。

如果您正在侦听复选框的状态何时发生变化,请使用toggled。如果您在用户点击复选框时正在侦听,无论是否更改状态,请使用clicked