수강한 개념
Qt
- C++ 기반 GUI 툴
- 약간 웹 하는것 같음... winform 하고는 또 다른 느낌...?
- 여러 위젯들이 클래스로 만들어져 있고 Signal과 Slot으로 통신
- 필요한 클래스 불러와서 블럭맞추기 하면 됨
label
- 텍스트 박스 같은거
- 이미지도 넣을 수 있다고 함
PushButton
- 버튼
- 진짜로 그냥 그 버튼
문제 구현 / 개선방안
계산기 만들기
어엇... 하 씨..... 뭘 건드렸더니 안된다
추후 수정 예정
#include "widget.h"
#include "./ui_widget.h"
#include <QLabel>
#include <QPushButton>
#include <QGridLayout>
//계산기 일부만 구현
const char* ButtonChar[2][4] = {
{"1","2","3","+"},
{"0","C","=","-"}
};
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
m_label = new QLabel("0",this);
m_label->setGeometry(10,5,230,40);
m_label->setAlignment(Qt::AlignRight | Qt::AlignVCenter); //숫자창
for(int y = 0; y < 2; y++)
{
for(int x = 0; x < 4; x++)
{
buttons[4*y+x] = new QPushButton(ButtonChar[y][x],this);
buttons[4*y+x]->setGeometry(5+60*x, 50+60*y, 60, 60);
}
}
connect(buttons[0],SIGNAL(clicked()),SLOT(setNum()));
connect(buttons[1],SIGNAL(clicked()),SLOT(setNum()));
connect(buttons[2],SIGNAL(clicked()),SLOT(setNum()));
connect(buttons[4],SIGNAL(clicked()),SLOT(setNum()));//넘버패드
connect(buttons[3],SIGNAL(clicked()),SLOT(setOp()));
connect(buttons[7],SIGNAL(clicked()),SLOT(setOp()));//+,-
//signal, slot과 람다식은 함께 사용 X
connect(buttons[5],&QPushButton::clicked,this, [=](){m_label->setText("0");});//c
connect(buttons[6],&QPushButton::clicked,this,[this]() //=
{
qreal result=0;
m_isFirst = true;
if(m_op == "+")
result = m_num1.toDouble() + m_label->text().toDouble();
else if(m_op == "-")
result = m_num1.toDouble() - m_label->text().toDouble();
else{
m_label->setText("Error");
return;
}
m_label->setText(QString::number(result));
});
this->resize(300, 200);
setMinimumSize(250,295);
setMaximumSize(250,295);
setWindowTitle("Calculator");
}
Widget::~Widget()
{
delete ui;
for(int i=0; i<8; i++){
delete buttons[i];
}
}
void Widget::setNum()
{
QPushButton *button = dynamic_cast<QPushButton*>(sender());
QString bStr;
if(button != nullptr) bStr = button->text();
if(m_label != nullptr){
QString lStr = m_label->text();
m_label->setText((lStr == "0"||m_isFirst)?bStr:lStr+bStr);
m_isFirst = false;
}
}
void Widget::setOp()
{
QPushButton *button = dynamic_cast<QPushButton*>(sender());
if(button != nullptr) m_op = button->text();
if(m_label != nullptr){
m_num1 = m_label->text();
m_isFirst = true;
}
}
기타 사항
재미는 있는데 아직 감을 잘 못잡겠다 이게 대체 머고
VEDA 바로가기 : www.vedacademy.co.kr
VEDA(한화비전 아카데미) 영상으로 확인하기 : https://url.kr/zy9afd
본 후기는 VEDA(한화비전 아카데미) 1기 학습 기록으로 작성되었습니다.
'교육관련 > 한화비전 VEDA 수강일지' 카테고리의 다른 글
[VEDA 1기 수강일지] 18일차 - Qt / C++ (3) : MainWindow, TextEditor (0) | 2024.08.07 |
---|---|
[VEDA 1기 수강일지] 17일차 - Qt / C++ (2) : 다양한 위젯, layout (0) | 2024.08.06 |
[VEDA 1기 수강일지] 15일차 - 프로젝트 마무리, 시험 (0) | 2024.08.02 |
[VEDA 1기 수강일지] 14일차 - 2인 프로젝트 : to do list (0) | 2024.08.01 |
[VEDA 1기 수강일지] 13일차 - C++ 기초 (6) / mordern C++ : (0) | 2024.07.31 |
댓글