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

sas*_*alm 26 c++ qt

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

pne*_*zis 48

toggled信号被发射每个复选框的选中状态的变化,即使它改变通过代码,而时间clicked只有当用户与对应的复选框,例如交互信号emited:

ui->checkbox->setChecked(true);  // toggled will be emitted but not clicked
Run Code Online (Sandbox Code Playgroud)


Saq*_*ain 7

QCheckBox继承切换和单击.

void QAbstractButton::clicked ( bool checked = false ) [signal]
Run Code Online (Sandbox Code Playgroud)

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

void QAbstractButton::toggled ( bool checked ) [signal]
Run Code Online (Sandbox Code Playgroud)

只要可检查按钮改变其状态,就会发出此信号.如果选中该按钮,则为true;如果未选中该按钮,则为false.这可能是用户操作,click()槽激活或调用setChecked()的结果.在发出此信号之前,将更新专用按钮组中按钮的状态.这意味着插槽可以作用于"关闭"信号或由状态已改变的组中的按钮发出的"开启"信号.例如,可以使用以下模式实现一个插槽,该插槽对新检查的按钮发出的信号做出反应,但忽略来自未经检查的按钮的信号.

 void MyWidget::reactToToggle(bool checked)
 {
    if (checked) {
       // Examine the new button states.
       ...
    }
 }
Run Code Online (Sandbox Code Playgroud)

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