-
[QT] 간단한 계산기를 만들어보자 -2C_C++ 프로그래밍/QT 2019. 6. 21. 01:19
로재의 개발 일기
계산기..?
"간단한 계산기를 만들어보자 -1"를 통해서는
프로젝트 생성과 기본적인 ui 생성을 진행했습니다.
이번에는 몇 가지 함수를 사용해서
pushButton을 클릭할 때 기능을 구현하여
계산기를 만들어 보겠습니다.
pushButton_click?
pushButton을 오른쪽 클릭을 하여 go to slot으로 향합니다.
그러면 다음과 같은 창이 생성이 되는데요.
OK를 클릭하시면...
다음과 같은 코드로 이동하는 것을 알 수 있습니다.
click 모션 작성하기
1234567891011// pushButton_00을 클랙했을때 모션void Dialog::on_pushButton_00_clicked(){if(QString::compare(ui->label_op->text(), "") == 0){ // ui의 연산자가 비어 있을 때ui->lineEdit_first->setText(ui->lineEdit_first->text() + "0"); // 첫 번째 피연산자에 0추가}else{ui->lineEdit_second->setText(ui->lineEdit_second->text() + "0"); // 두 번째 피연산자에 0}}cs 다음과 같이 작성을 해주시면 됩니다.
( QT는 C++ 기반이기 때문에 -> 및 ::와 같은 연산자는 부모와 자식의 관계라고 생각하시면 됩니다)
( ui->label_op->text() = ui의 자식 -> label_op의 자식 -> label_op가 가지고 있는 text )
이제 모든 0~9버튼을 다 생성하고 기능에 맞게 작성을 한 뒤에
한번 실행을 시켜서 제대로 작동되는 지 확인해봅니다.
정상적으로 실행이 되네요.
( 두 번째 피연산자는 if문을 통과할 수 없기 때문에 삽입이 안됩니다.)
( 하지만 곧 될 거예요 )
이제는 연산자 기능을 넣어볼게요.
마찬가지로 go to slot을 통해서 아래와 같이 코드를 작성합니다.
123456789101112131415161718192021222324252627282930313233// <----- section of adding operator ----> //void Dialog::on_pushButton_plus_clicked(){ui->label_op->setText("+"); // ui의 label_op의 내용을 +로 바꾼다.}void Dialog::on_pushButton_minus_clicked(){ui->label_op->setText("-");}void Dialog::on_pushButton_mul_clicked(){ui->label_op->setText("*");}void Dialog::on_pushButton_deply_clicked(){ui->label_op->setText("/");}void Dialog::on_pushButton_pow_clicked(){ui->label_op->setText("^");}void Dialog::on_pushButton_sqrt_clicked(){ui->label_op->setText("√");}// <---- section of adding operator end ----> //cs 마찬가지로 clear버튼과 close 버튼도 작성해줍니다.
12345678// clear buttonvoid Dialog::on_pushButton_clear_clicked(){ui->lineEdit_first->setText(""); // ui의 lineEdit_first의 내용을 ""으로 바꾼다.ui->label_op->setText("");ui->lineEdit_second->setText("");ui->lineEdit_result->setText("");}cs 12345// window close = exitvoid Dialog::on_pushButton_exit_clicked(){this->close();}cs 정상적으로 실행이 될까요?
정상적으로 실행이 됩니다.
변수 만들기
결과를 알기 위해서는 첫 번째 입력과 두 번째 입력을 알아야 합니다.
그리고 그 데이터를 저장하기 위해서 변수를 사용해야 합니다.
이를 위해서 dialog.h 헤더 파일로 향합니다.
그리고 double first, second를 작성합니다.
이제 우리는 이 변수들을 사용할 거예요.
결과를 출력하자!
위에서 언급한 go to slot 속성을 통해서 pushButton의 click 모션을 생성합니다.
그리고 제곱근과 제곱 값을 구해 줄 qSqrt와 qPow의 헤더 파일을 불러옵니다.
이를 사용해서 우리는 루트 값과 제곱 값을 구할 거예요.
(가장 상단에 작성)
1#include "qmath.h" // qSqrt 및 qPow 헤더 파일cs - qPow(a, b)
a의 b승을 구하는 연산
- qSqrt(a)
a의 제곱근을 구하는 연산입니다.
(간단히 말하면 루트 씌운 a 값)
d1234567891011121314151617181920212223242526// result print buttonvoid Dialog::on_pushButton_result_clicked(){first = ui->lineEdit_first->text().toDouble();second = ui->lineEdit_second->text().toDouble();if(ui->label_op->text() == "+"){ui->lineEdit_result->setText(QString::number(first + second));}else if(ui->label_op->text() == "-"){ui->lineEdit_result->setText(QString::number(first - second));}else if(ui->label_op->text() == "*"){ui->lineEdit_result->setText(QString::number(first * second));}else if(ui->label_op->text() == "/"){ui->lineEdit_result->setText(QString::number(first / second));}else if(ui->label_op->text() == "^"){ui->lineEdit_result->setText(QString::number(qPow(first, second)));}else if(ui->label_op->text() == "√"){ui->lineEdit_result->setText(QString::number(qSqrt(first)));}}cs first 변수에는 첫 번째 피연산자가 들어가게 되고
second 변수에는 두 번째 피연산자가 들어가게 됩니다.
그리고 ui에 있는 연산자가 어떠한 연산자 인지!
확인하는 if문을 통해서 lineEdit_result의 값을 출력해줍니다.
마무리
정상적으로 출력이 잘 됩니다.
하지만
double의 범위를 벗어나는 계산은 정상적으로 실행 할 수가 없습니다.
double의 범위 = 1.79E-308(-1.79*10^308) ~ 1.79E+308(1.79*10^308) (15digits)
관련글
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
반응형'C_C++ 프로그래밍 > QT' 카테고리의 다른 글
[QT] 메모장을 만들어보자 -2 (0) 2019.06.23 [QT] 메모장을 만들어 보자 -1 (0) 2019.06.22 [QT] 간단한 GUI 계산기 만들어보자 -1 (0) 2019.06.21 [QT] QT 5.10 리눅스에서 설치하기! (0) 2019.06.07