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

סטנ*_*ונן 3 lambda qt signals-slots c++11

我在Windows7上使用Qt5(启用了C++ 11).
在我的应用程序中,我有这样的事情:

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

这里alarmQCheckBoxm_timerQTimer.

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

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

use*_*274 5

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

这样你就不需要参考了ui->alarm.

QCheckBox::stateChanged(int state),state真的是一个

枚举Qt :: CheckState

Qt :: Unchecked = 0 未选中该项目.

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

Qt :: Checked = 2检查项目.

  • 还有一件事:你可以使用信号切换(bool检查)而不是stateChanged(int state) (2认同)