アルゴリズム
前回はウィジェットのtext関数を変数のように使い、ラジオボタンで距離、時間の単位を変更すると表示の方の速度の単位も変更するようにしました(前回の記事)。
今回は時間の単位を変更に伴って表示しているデータも自動更新します。もうすでに何回も登場していますが、ウィジェットのsetText関数で表示しているデータを変更します。
コード
// 省略
//時間単位変更イベント
void MainWindow::on_rB_hour_clicked(bool checked)
{
if(_idxPsy==1)
{
ui->lE_I->setText(QString::number(_I/3600)); //秒→時間
ui->lE_R->setText(QString::number(_R*3600)); //追記
ui->lbl_unitI->setText("h");
ui->lbl_unitR->setText(ui->lbl_unitE->text()+"/"+ui->lbl_unitI->text());
}
}
void MainWindow::on_rB_minutes_clicked(bool checked)
{
if(_idxPsy==1)
{
ui->lE_I->setText(QString::number(_I/60)); //秒→分
ui->lE_R->setText(QString::number(_R*60)); //追記
ui->lbl_unitI->setText("m");
ui->lbl_unitR->setText(ui->lbl_unitE->text()+"/"+ui->lbl_unitI->text());
}
}
void MainWindow::on_rB_seconds_clicked(bool checked)
{
if(_idxPsy==1)
{
ui->lE_I->setText(QString::number(_I)); //秒
ui->lE_R->setText(QString::number(_R)); //追記
ui->lbl_unitI->setText("s");
ui->lbl_unitR->setText(ui->lbl_unitE->text()+"/"+ui->lbl_unitI->text());
}
追加とコメントアウトしているコードを追加しました。変数_Rはm/sの値を格納しているので時間のラジオボタンをm(分)にすると変数_Rを60倍、h(時間)にすると変数_Rを3600倍にします。速度計算に限らずこのような計算は算数や物理といった知識も必要になってきます。プログラミングを学習する過程で必要があれば勉強していくと良いでしょう。
それでは動作確認をします。まず距離は10m、時間を2sで計算します。すると速度は5m/sとなります。ここで分(m)のラジオボタンに変更します。そうすると速度は300m/sに、ラジオボタンを時間(h)に変更すると速度は18000m/hとなります。今回はここまでですが、距離のラジオボタンをミリ(k)にすると速度は18km/hとなるはずが、0.005km/hとなってしまいます。次回はこのバクについて考えたいと思います。