ユーザーフォームを作る
前回関数と新規ソースファイルを作りコードを整理して見やすくしました(前回の記事)。今回は電卓に単位をつけ、選択した単位によって値を変えるための準備をします。なお単位はラジオボタンで選択します。
まずは下記資料の様にユーザーフォームにウィジェットを配置します。



続いてそれぞれのラジオボタンにイベントを起こします。
イベントを作る

各イベント関数内にメッセージを出力するコードを書きます。ソフト起動時にnormalのラジオボタンにチェックを入れておきたいので、プロパティのcheckedにレ点を入れておきます。イベント関数の引数はtrueかfalseが入るbool型の変数、つまりラジオボタンにチェックがある場合はtrue、チェックがない場合はfalseが渡されます。
イベントを作るとhファイルと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)
qDebug()<<"kを選択";
}
void MainWindow::on_rB_normal_clicked(bool checked)
{
if(checked==true)
qDebug()<<"normalを選択";
}
void MainWindow::on_rB_m_clicked(bool checked)
{
if(checked==true)
qDebug()<<"mを選択";
}
実行しラジオボタンを選択するとそれぞれ選択した単位を表すメッセージが表示されたと思います。次回はラジオボタンを選択すると値が変わるようにします。