서론
ui를 제작 했으니 내부 로직을 구현해보자
Calculator.h
#ifndef CALCULATOR_H
#define CALCULATOR_H
#include <QDialog>
namespace Ui {
class Calculator;
}
class Calculator : public QDialog
{
Q_OBJECT
public:
explicit Calculator(QWidget *parent = nullptr);
~Calculator();
void ProcessNum(int num);
void ProcessOperation(char operation_flag);
private slots:
void btn_1();
void btn_2();
void btn_3();
void btn_4();
void btn_5();
void btn_6();
void btn_7();
void btn_8();
void btn_9();
void btn_0();
void btn_CE();
void btn_C();
void btn_back();
void btn_Reciprocal();
void btn_Square();
void btn_QuareRoot();
void btn_PlusMinus();
void btn_Sum();
void btn_Sub();
void btn_Mul();
void btn_Div();
void btn_Equal();
void btn_Dot();
private:
Ui::Calculator *ui;
char operation_flag = 0;
char reset_mode = 0;
char plus_minus_flag = 0;
char dot_flag = 0;
double first_num = 0;
};
#endif // CALCULATOR_H
processNum(int num)
숫자 입력 시 처리해주는 멤버 함수
processOperation
연산자 입력 시 operation_flag 값을 설정해주는 멤버 함수
Slots 함수 구현
저 많은 슬롯 함수를 헤더 파일에 정의를 선언했다.
이제는 cpp 파일에 슬롯 함수를 구현해야 되는데 너무 많다.
귀찮아서 한 번에 추가하는 방법을 찾아보았다.
1. 헤더파일에서 우클릭
2. Refactor -> Create Implementations for Member Functions 선택한다.
확인을 누르면 cpp 파일에 헤더파일에 선언한 슬롯 함수들의 정의 코드가 생성 되는 모습을 볼 수 있다.
Connect
이제 버튼의 시그널을 보내면 슬롯 함수가 실행되게 연결 시켜줘야한다.
connect(연결할 객체, SIGNAL(멤버 함수), 연결할 곳, SLOT(함수));
#include "calculator.h"
#include "ui_calculator.h"
Calculator::Calculator(QWidget *parent) :
QDialog(parent),
ui(new Ui::Calculator)
{
ui->setupUi(this);
ui->current->setText("0");
ui->current->setAlignment(Qt::AlignRight);
ui->current->setAlignment(Qt::AlignBottom);
connect(ui->btn_one, SIGNAL(clicked(bool)), this, SLOT(btn_1()));
connect(ui->btn_two, SIGNAL(clicked(bool)), this, SLOT(btn_2()));
connect(ui->btn_three, SIGNAL(clicked(bool)), this, SLOT(btn_3()));
connect(ui->btn_four, SIGNAL(clicked(bool)), this, SLOT(btn_4()));
connect(ui->btn_five, SIGNAL(clicked(bool)), this, SLOT(btn_5()));
connect(ui->btn_six, SIGNAL(clicked(bool)), this, SLOT(btn_6()));
connect(ui->btn_seven, SIGNAL(clicked(bool)), this, SLOT(btn_7()));
connect(ui->btn_eight, SIGNAL(clicked(bool)), this, SLOT(btn_8()));
connect(ui->btn_nine, SIGNAL(clicked(bool)), this, SLOT(btn_9()));
connect(ui->btn_zero, SIGNAL(clicked(bool)), this, SLOT(btn_0()));
connect(ui->btn_CE, SIGNAL(clicked(bool)), this, SLOT(btn_CE()));
connect(ui->btn_C, SIGNAL(clicked(bool)), this, SLOT(btn_C()));
connect(ui->btn_back, SIGNAL(clicked(bool)), this, SLOT(btn_back()));
connect(ui->btn_reciprocal, SIGNAL(clicked(bool)), this, SLOT(btn_Reciprocal()));
connect(ui->btn_square, SIGNAL(clicked(bool)), this, SLOT(btn_Square()));
connect(ui->btn_quareRoot, SIGNAL(clicked(bool)), this, SLOT(btn_QuareRoot()));
connect(ui->btn_plusminus, SIGNAL(clicked(bool)), this, SLOT(btn_PlusMinus()));
connect(ui->btn_plus, SIGNAL(clicked(bool)), this, SLOT(btn_Sum()));
connect(ui->btn_mul, SIGNAL(clicked(bool)), this, SLOT(btn_Mul()));
connect(ui->btn_sub, SIGNAL(clicked(bool)), this, SLOT(btn_Sub()));
connect(ui->btn_div, SIGNAL(clicked(bool)), this, SLOT(btn_Div()));
connect(ui->btn_equal, SIGNAL(clicked(bool)), this, SLOT(btn_Equal()));
connect(ui->btn_dot, SIGNAL(clicked(bool)), this, SLOT(btn_Dot()));
}
Calculator::~Calculator()
{
delete ui;
}
노가다를 해서 연결하였다.
slot 함수 생성 -> signal 연결을 수동 작업이 아닌 자동 작업으로도 할 수 있다.
Signal Slot 자동 연결
ui에서 이벤트를 실행 할 객체를 선택 후 우클릭을 누르면
Go to slot 이라는 버튼을 누른다.
여기서 원하는 SIGNAL을 누르고 OK를 누르면 헤더파일의 슬롯 함수에
이렇게 네이밍처리가된 함수가 생긴다.
다음 시간에는 SLOT 함수를 구현해보자
'🌠Development > QT' 카테고리의 다른 글
QT project - 스톱워치 구현하기 (0) | 2024.07.17 |
---|---|
QT project - 계산기 구현하기 (2) (0) | 2024.07.17 |
QT project - 새 레이아웃 보이기 (0) | 2024.07.16 |
QT project - QTimer 사용하기 (0) | 2024.07.16 |
QT project - 응용 프로그램 만들어보기 (0) | 2024.07.16 |