正規表現概要
前回は空白判定を使ってオームの法則の計算を使い分ける仕組みを作りました(前回の記事)。
今回は正規表現というテクニックを使ってlineE ditに数字と小数点用のドットしか入力できないように制限を設けてバグを防ぎます。下記資料が正規表現の関数です。

mainwindow.cppに下記コードを書いて3桁の数値と小数点以下2桁のまで入力可能な正規表現を実装します。ライブラリの<QRegExpValidator>を忘れないように注意してください。
コード
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QRegExpValidator>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QRegExp reg("[0-9]{1,}[.][0-9]{2}"); //正規表現設定
ui->lE_E->setValidator(new QRegExpValidator(reg,this)); //正規表現をセット
ui->lE_R->setValidator(new QRegExpValidator(reg,this));
ui->lE_I->setValidator(new QRegExpValidator(reg,this));
}
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(); //電流値代入
if(ui->lE_E->text()=="") //電圧が空白の場合
{
_E=_I*_R; //電圧計算
ui->lE_E->setText(QString::number(_E)); //電圧表示
}
else if(ui->lE_R->text()=="") //抵抗が空白の場合
{
_R=_E/_I; //抵抗計算
ui->lE_R->setText(QString::number(_R)); //抵抗表示
}
else if(ui->lE_I->text()=="") //電流が空白の場合
{
_I=_E/_R; //電流計算
ui->lE_I->setText(QString::number(_I)); //電流表示
}
}
コードを書き終えたら実行してみましょう。数字と小数点しか入力できなくなったと思います。正規表現は入力させたくない文字に制限をかけてアプリを正しく動かすのに役立ちます。必要に応じて上手に使いましょう。次回はlineEditそのものに正規表現の機能を実装します。