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

4

我正在Windows7上使用启用了C++11的Qt5。
在我的应用程序中,有以下内容:

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

其中alarmQCheckBoxm_timer是一个QTimer

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

我测试了一下,它似乎可以工作,但我不确定它是否100%正常...或者是否有更好的lambda函数来完成它?

1个回答

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::Unchecked = 0 未选中。

Qt::PartiallyChecked = 1 部分选中。在分层模型中,如果某些子项被选中而其他子项未被选中,则其父项可能会部分选中。

Qt::Checked = 2 已选中。


太好了!我明天会测试一下,但我猜它应该能正常工作 :) - סטנלי גרונן
适当的测试应该是:if (state == Qt :: Unchecked) m_timer.stop(); else if (state == Qt :: Checked) m_timer.start();。你应该忽略 PartiallyChecked 状态! - Kuba hasn't forgotten Monica
2
还有一件事:您可以使用信号toggled(bool checked)代替stateChanged(int state)。 - user3302274

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接