[Qt] GUI 기반 "Hello World" 코드 학습

amudomolla·2023년 6월 30일
0

Qt

목록 보기
3/12
post-custom-banner

이전 게시물

main.cpp


#include "widget.h"
#include <QApplication> 

int main(int argc, char *argv[]) 
{
    QApplication a(argc, argv);
    Widget mywidget;  // widget.h에서 생성된 Widget 클래스의 mywidget 오브젝트
    mywidget.show();  // show() : GUI 위젯을 화면에 표시
    
    return a.exec();
}

widget.h


#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>  // 버튼 위젯

class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = 0);
    ~Widget();
    
private:
    QPushButton *btn;  // btn 오브젝트 선언
    QString str;       // QString : Qt에서 제공하는 문자열 처리 클래스 변수
    
public slots:          // SLOT 함수 (이벤트 함수)
    void slot_btn();   // btn 을 클릭하면 slot_btn() 함수를 호출
};

#endif // WIDGET_H

Widget(QWidget *parent = 0);
  • QWidget*을 가질 수 있는 생성자를 정의
  • = 0 : 일반적인 경우, 부모 위젯의 주소와 같은 메모리의 특정 주소를 가리키는 포인터가 필요하지만 상위 위젯을 설정하고 싶지 않은 경우, = 0으로 표시

int main(int argc, char *argv[])
  • int argc : main()함수에 전달되는 데이터의 개수
  • char *argv[] : main()함수에 전달되는 실제적인 데이터로 char형 포인터 배열로 구성
    (첫 번째 문자열은 프로그램의 실행경로 => (argv[0] = 실행경로))
exec()
  • 이벤트 루프에서는 내부 이벤트 및 운영 체제의 이벤트 (타이머 및 소켓 등)를 처리하는데 exec() 호출로 시작됨
  • 이벤트 루프가 종료 (quit()) 될 때까지 exec() 함수는 반환되지 않으며, 일반적으로 exec() 함수는 main() 함수의 return으로 호출

widget.cpp


#include "widget.h"
#include <QDebug>  // C++의 cout 같은 거

Widget::Widget(QWidget *parent) : QWidget(parent)
{
    setFixedSize(300, 200);  // 위젯의 크기를 지정하는 멤버 함수 (가로, 세로)
    str = QString("Hello World");  // QString 클래스 변수인 str에 “Hello World” 문자열 저장
    btn = new QPushButton(str, this);
    btn->setGeometry(10, 10, 100, 30);
    connect(btn, &QPushButton::clicked, this, &Widget::slot_btn);  // btn 버튼의 클릭 이벤트가 발생하면, slot_btn() 함수를 호출
}
void Widget::slot_btn()
{
    qDebug() << "Hello World button clicked!!";
}
Widget::~Widget()
{
}

connect(Signal이 발생하는 곳 , 발생Signal , Slot이 발생하는 곳, 발생Slot)
  • 첫 번째 인자는 이벤트를 발생하는 오브젝트
  • 두 번째 인자는 이벤트의 종류 (이벤트의 종류 : clicked, mouse over, released 등)
  • 세 번째 인자는 이벤트를 받는 클래스 (Signal과 Slot과 connect를 한 클래스 내에서 사용했으면, this를 사용)
  • 네 번째 이벤트의 이벤트를 받는 클래스의 헤더파일에서 SLOT키워드에서 정의 함수를 지정
profile
👩‍💻 기록 및 복습을 위함
post-custom-banner

0개의 댓글