Notice
Recent Posts
Recent Comments
Link
It won't hurt to try
[C++/윈도우프로그래밍응용]31. Qt의 메인 윈도우 (2) 본문
C++에 대한 Qt의 확장
GUI 프로그램은 실행 시의 효율성과 유연성 양쪽 모두 필요
표준 C++ 객체 모델은 객체 패러다임에 대해서 매우 효율적으로
런타임 자원을 지원하지만 일부 영역에서 정적 측면에서 유연성 부족
강력한 시그널/슬롯 구조
- 상호 관계없는 객체 간의 통신 지원
객체 속성(Object Property)
- 질의가 가능한 디자인 가능
→ metaObject()메소드와 QMetaObject 클래스
강력한 이벤트와 이벤트 필터
국제화를 위한 문자 번역
타이머(Timer)
- 이벤트 구동 GUI에서 많은 작업(Task)을 간결한 처리가 가능하도록 동일 간격으로 동작
계층적인 객체 트리(Object Tree)
- 객체 간의 상관관계 구성
QObject클래스
- Qt에서의 대부분의 클래스는 표준 C++기능을 이용할 수 있도록 QObject클래스를 상속
- 시그널과 슬롯을 구현하는 객체(위젯)들은 모두 QObject 클래스를 계승
- 타이머와 관련된 메소드 제공
- 디버그 관련 객체 정보에 관한 메소드도 제공
- 문자 번역과 같은 국제화 관련 메소드를 제공
- 이벤트와 관련된 메소드 제공
- 객체의 구조와 관련된 메소드를 제공
사용자 정의 슬롯
사용자 정의 슬롯을 위한 3가지 조건
1. 부모 클래스는 QObject 클래스를 직/간접적으로 상속
2. 헤더파일(.h)에서 클래스의 정의 부분에 Q_OBJECT 지시어 필요
- 메타 오브젝트 코드(moc)가 생성될 수 있도록 지정
- qmake가 moc 컴파일러를 수행할 수 있도록 해줌
3. 클래스 내에 시그널과 슬롯을 선언
- 슬롯 : 헤더파일(.h)에서 "접근 지정자 + slots:" 아래에 선언하고 소스코드(.cpp)에서 구현
- 시그널 : "signals:" 아래에 선언
- 시그널을 선언할 뿐 구현할 필요가 없음
→ moc 유틸리티가 메타 오브젝트 코드에 자동으로 구현
슬롯은 일반 함수와 같이 호출 가능
슬롯을 사용할 때는 일반적으로 void형의 반환형을 사용
widget.h
#include <QWidget>
// QObject를 직/간접적으로 상속받아야함
class Widget : public QWidget {
// Q_OBJECT를 명시해줘야함
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
// 슬롯은 접근지정자+slots안에다가 구현했는가
public slots:
void slotQuit();
}
사용자 정의 슬롯은 구현이 필요
widget.cpp
Widget::Widget(QWidget *parent) : QWidget(parent) {
QLabel *label = new QLabel("<font color=blue>Hello Qt!</font>", this);
label->setGeometry(10,50,75,35);
connect(quit, SIGNAL(clicked()), this, SLOT(slotQuit()));
}
void Widget::slotQuit() {
qDebug("slotQuit");
qApp->quit();
}
moc(Meta Object Compiler)
시그널/슬롯은 C++에서 직접 지원하지 않는 기능
사용자 정의의 시그널/슬롯을 사용하는 소스코드를 컴파일 할 수 있도록 메타 오브젝트 코드를 생성
$ moc - o moc_widget.cpp widget.h
qmake 유틸리티
- Qt의 프로젝트 파일과 makefile파일을 생성
- 프로젝트 파일의 생성 : $ qmake -project widget.cpp
- makefile의 생성 : $ qmake [ - makefile]
qmake -project qmake [-makefile]
Source code -> .pro -> makefile
Qt creator
- Build 메뉴에서 Run qmake 항목
300x250
300x250
'C++ > 윈도우프로그래밍응용' 카테고리의 다른 글
[C++/윈도우프로그래밍응용]33. 국제화 (0) | 2021.11.28 |
---|---|
[C++/윈도우프로그래밍응용]32. 다이얼로그 (0) | 2021.11.28 |
[C++/윈도우프로그래밍응용]30. Qt의 메인 윈도우 (1) (0) | 2021.11.18 |
[C++/윈도우프로그래밍응용]29. 윈도우의 구성과 레이아웃 매니저 (0) | 2021.11.16 |
[C++/윈도우프로그래밍응용]28. Qt의 기본 프로그래밍 (0) | 2021.11.13 |
Comments