アルゴリズム
前回はフォーム上値表示部の隣に単位表示をつけ、ラジオボタンで切り替えられるアルゴリズムを作りました(前回の記事)。今回は前回のアルゴリズムを利用してラジオボタンで値と単位を変更します。仕様はオームの法則計算後ラジオボタンを変更すると値と単位が変わる、という内容にします。以下mainwindow.cppのコードです。
コード
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QRegExpValidator>
#include <QDebug> //追記
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
_idxTab=ui->tabWidget->currentIndex(); //開いているtab番号代入
_idxPsy=0; //物理計算インデックス初期化
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pB_Do_clicked()
{
_E=ui->lE_E->text().toFloat(); //電圧代入
_R=ui->lE_R->text().toFloat(); //抵抗値代入
_I=ui->lE_I->text().toFloat(); //電流値代入
_D=ui->lE_D->text().toFloat(); //直径代入
_Z=ui->lE_Z->text().toFloat(); //歯数代入
_M=ui->lE_M->text().toFloat(); //モジュール代入
switch(_idxTab)
{
case 0:
switch (_idxPsy)
{
case 0:
calcOhm(); //オームの法則計算
break;
case 1:
calcDstSpdTm(); //距離速度時間計算
break;
}
break;
case 1:
calcModule(); //モージュール計算
break;
}
}
//tab切り替え時のイベント
void MainWindow::on_tabWidget_currentChanged(int index)
{
_idxTab=ui->tabWidget->currentIndex(); //開いているtab番号代入
}
//物理計算内容切り替え時のイベント
void MainWindow::on_cmbBx_Physics_currentIndexChanged(int index)
{
_idxPsy=index;
switch (_idxPsy)
{
case 0:
ui->lbl_E->setText("電圧");
ui->lbl_R->setText("抵抗");
ui->lbl_I->setText("電流");
break;
case 1:
ui->lbl_E->setText("距離");
ui->lbl_R->setText("速度");
ui->lbl_I->setText("時間");
break;
}
}
//今回追加したコード
void MainWindow::on_rB_k_clicked(bool checked)
{
if(checked==true) //kに変換
{
ui->lE_E->setText(QString::number(_E/1000));
ui->lE_R->setText(QString::number(_R/1000));
ui->lE_I->setText(QString::number(_I/1000));
ui->lbl_unitE->setText("kV");
ui->lbl_unitR->setText("kΩ");
ui->lbl_unitI->setText("kA");
}
}
void MainWindow::on_rB_normal_clicked(bool checked)
{
if(checked==true) //normalに変換
{
ui->lE_E->setText(QString::number(_E));
ui->lE_R->setText(QString::number(_R));
ui->lE_I->setText(QString::number(_I));
ui->lbl_unitE->setText("V");
ui->lbl_unitR->setText("Ω");
ui->lbl_unitI->setText("A");
}
}
void MainWindow::on_rB_m_clicked(bool checked)
{
if(checked==true) //に変換
{
ui->lE_E->setText(QString::number(_E*1000));
ui->lE_R->setText(QString::number(_R*1000));
ui->lE_I->setText(QString::number(_I*1000));
ui->lbl_unitE->setText("mV");
ui->lbl_unitR->setText("mΩ");
ui->lbl_unitI->setText("mA");
}
}
コードを実行して動作を確認します。値と数値がラジオボタンを変える度に変更されます。オームの法則の値単位変更は実装されました。次回は距離速度時間の単位を付けます。