Qt C ++ 11 lambda:这个连接(信号槽)是否正确?

时间:2016-06-21 11:41:24

标签: qt c++11 lambda signals-slots

我在Windows7上使用Qt5(启用了C ++ 11) 在我的应用程序中,我有类似的东西:

connect(ui->alarm, &QCheckBox::stateChanged, [this]{
  (ui->alarm->isChecked()) ? m_timer.start() : m_timer.stop();
});

其中alarmQCheckBoxm_timerQTimer

我想根据闹钟复选框的状态动态启动/停止计时器。

我测试过,它似乎有效,但我不确定它是否100%正常......或如果有更好的lambda可以做到

1 个答案:

答案 0 :(得分:5)

connect(ui->alarm, &QCheckBox::stateChanged, [this](int state){
  state ? m_timer.start() : m_timer.stop();
});

这样您就不需要引用ui->alarm

QCheckBox::stateChanged(int state)中,state确实是

  

枚举Qt :: CheckState

     

Qt ::未选中 = 0该项目未选中。

     

Qt :: PartiallyChecked = 1项目已部分检查。如果检查了他们的孩子中的一些但不是全部,则可以部分检查分层模型中的项目。

     

Qt :: Checked = 2项目已经过检查。