31

QCheckBox::toggled(bool)QCheckBox::clicked(bool)信号之间有什么实际区别吗?两者都有相同的签名,我连接哪一个有关系吗?

4

3 回答 3

56

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

ui->checkbox->setChecked(true);  // toggled() will be emitted, but not clicked()
于 2013-03-22T12:36:47.663 回答
7

QCheckBox Inherit 切换和单击。

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

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

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

每当可检查按钮更改其状态时,都会发出此信号。如果按钮被选中,checked 为真,如果按钮未被选中,则为假。这可能是用户操作、click() 插槽激活或调用 setChecked() 的结果。独占按钮组中的按钮状态在此信号发出之前更新。这意味着插槽可以对状态已更改的组中的按钮发出的“关闭”信号或“打开”信号起作用。例如,对新选中按钮发出的信号做出反应但忽略来自未选中按钮的信号的插槽可以使用以下模式实现:

 void MyWidget::reactToToggle(bool checked)
 {
    if (checked) {
       // Examine the new button states.
       ...
    }
 }

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

于 2013-03-22T12:37:25.943 回答
3
QCheckBox::toggled(bool)

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

QCheckBox::clicked(bool)

单击复选框时发出。也就是说,当用户单击并释放复选框时。在键入或使用快捷键时也会发生click。复选框不一定要选中才能发出。

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

于 2013-03-22T12:36:56.567 回答