기존 Frame Work 와 다르게 Qt 는 Signal, Slot 이라는 Object 와 Object 사이에 정보를 전달하고 받는 함수를 제공하고 이를 연결해주는 Connect 함수를 제공한다.
간단히 QWidget Application 을 하면 아래와 같은 기본 환경이 만들어진다.
그리고 source 파일에, C++ Class "sender.cpp" 를 만든다. 그럼 자동으로 sender.h 를 만들겠냐고 묻는데, Yes를 하고 그대로 진행한다. 비슷하게 "receiver.cpp" 과 "receiver.h" 파일도 만들자.
이렇게 파일들이 생성되고 Build 를 한번 해보면, 빈 윈도우 하나를 띄우며 Compile 도 잘 수행되는 것을 볼 수 있다.
이제 sender.h 로 가서 sender class 의 코드를 작성해보자. 초기 화면은 아래와 같다.
sender
#ifndef SENDER_H
#define SENDER_H
#include <QObject>
class sender : public QObject
{
Q_OBJECT
public:
explicit sender(QObject *parent = nullptr);
signals:
void senderSignal();
};
#endif // SENDER_H
sender.h 와 비슷하게 이번에는, signal 을 받는 부분인 slot 기능을 하는 receiver.h 를 작성한다. 여기서는 receiver class 내에 public slot: 에 receiverSlot() 함수를 만든다. 간단한 string 값을 출력하기 위해 <QDebug> 를 선언했다.
#ifndef RECEIVER_H
#define RECEIVER_H
#include <QObject>
#include <QDebug>
class receiver : public QObject
{
Q_OBJECT
public:
explicit receiver(QObject *parent = nullptr);
signals:
public slots:
void reciverSlot();
};
#endif // RECEIVER_H
Qt Creator에서 함수를 클릭하면 메뉴가 나타나고, 여기서 Refector를 선택하면 친절하게도 해당 함수를 구현하기 위한 코드도 작성해준다.
이렇게 receiver.cpp 에 간단히 slot을 실행하기 위한 함수를 작성한다.
#include "receiver.h"
receiver::receiver(QObject *parent) : QObject(parent)
{
}
void receiver::receiverSlot()
{
qInfo() << "Executing slot from" << this;
}
이제 main.cpp 로 가서, signal 을 생성하고 slot 을 연결시키는 부분을 작성한다.
그전에 이전 class 를 작성하면서 class 이름을 소문자로 하였는데, 문법상 문제는 없지만 자주 비슷한 이름을 갖는 클래스 변수를 사용하는 일이 많기 때문에 대부분의 프로그래머들은 class 를 대문자로 시작하게 이름을 만든다. 우리도 일반적인 원칙을 따라서 class 의 첫 알파벳을 대문자로 Update 하자!
header 의 클래스 이름을 바꾸자 마자, 아래와 같이 똑똑하게 메세지를 보내준다. 나머지도 마저 고쳐주자.
'Solution > Qt Programming' 카테고리의 다른 글
[Qt] Rotating Teapot in MDI Window (0) | 2023.08.26 |
---|---|
[Qt] Drawing a triangle in a sub-window with Open-GL (0) | 2023.08.05 |
[Qt] Window에서 QGLWidget 기반 OpenGL 적용 (0) | 2023.08.04 |
[Qt] OpenGL 예제 (1) | 2023.07.01 |
Qt 에서 Dial 구현 (0) | 2023.06.23 |