2016-06-21 6 views
3

Windows7でQt5(C++ 11対応)を使用しています。Qt C++ 11ラムダ:この接続(信号スロット)は正しいですか?

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

alarmQCheckBoxで、m_timerQTimerです:私のアプリで
私はこのような何かを持っています。

アラームチェックボックスのステータスに応じて、オンザフライでタイマーを開始/停止したいとします。

私はテストしましたが、うまくいくようですが、それが100%okかどうかわかりません...またはより良いラムダがあれば

答えて

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

この方法では、ui->alarmを参照する必要はありません。 QCheckBox::stateChanged(int state)

stateは実際のQt

列挙Qtの::にcheckState

で:: = 0未確認アイテムはオフです。

Qt :: PartiallyChecked = 1項目が部分的にチェックされています。階層モデルの項目は、すべてではないが一部の子がチェックされているかどうかを部分的にチェックすることができます。

Qt ::チェック済み = 2項目がチェックされています。

+0

素晴らしい!私は明日それをテストしますが、それはうまくいくと思います:) –

+0

適切なテストは次のようになります: 'if(state == Qt :: Unchecked)m_timer.stop(); else if(state == Qt :: Checked)m_timer.start(); '。あなたは 'PartiallyChecked'状態を無視するべきです! –

+2

もう一つ:stateChanged(int state)の代わりにsignal toggled(bool checked)を使うことができます。 – user3302274

関連する問題