서론

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 함수를 구현해보자