커뮤니티 | 큐티/임베디드/큐토피아 | PODO | SDL | 마이크로윈도우 | 리눅스프로그래밍 | 기타 | 포인트순위 | 최근게시물최근게시물 RSS  
korone.net에 다루었으면 하는것은요?
 
 
 
 
 
568
1,131
3,878
4,016,113
  현재접속자 : 92 (회원 0)






배너 신청 문의

 
작성일 : 14-07-08 15:09
[QT/Win32] Q_INTERFACE 매크로에 대해..
 글쓴이 : 구름님
조회 : 6,307   추천 : 2  
다중상속을 잘 활용하면 프로그램 코드들을 좀 효율적으로 관리할 수 있잖아요
Q_INTERFACE는 우리가 OOP 라이브러리인 Qt를 사용하는한 반드시 알아두어야 하는것이 아닐까 싶습니다.

일반적으로, C++에서 클래스들의 상속에 있어서

class ObjA {};
class ObjB {};
class ObjAB : public ObjA, public ObjB {};

이렇게 다중상속을 하죠.

Qt가 나름의 독특한 특색을 띄고 있는것이 Meta-Object라는 시스템인데요
뭐 안으로 파고드니 좀 복잡해서 '앗 뜨거'가 되더군요.. 저도 어느 정도만 파악했지 자세히는 모르겠습니다만
클래스 선언부에 반드시 Q_OBJECT 매크로가 선언되어 있어야만 진정한 QObject로서
qobject_cast와 signal/slot을 쓸 수 있다는 것이라 볼 수 있겠습니다.
그러다보니, 클래스의 다중상속에 문제가 생길 수 있는 겁니다. 그때 일반 클래스와
Q_OBJECT가 선언된 QObject에서 파생된 클래스의 결합에 Q_INTERFACE 매크로가 필요하게 됩니다.

// ObjA.h
class ObjA {
public:
  ObjA(int _something) {
      //...
  }
  //...
};
#define ObjAInterface_iid "aaa.bbb.ccc.ddd" //--[1]
Q_DECLARE_INTERFACE(ObjA, ObjAInterface_iid) //--[2]

// MyObj.h
class MyObj : public QObject, class ObjA
{
    Q_OBJECT
    Q_INTERFACES(ObjA) //--[3]
public:
    MyObj(int _something, QObject* parent = 0) :  QObject(parent), ObjA(_something) {
    }
    //...
signals:
    void mySignal();
};

--[1] 대충 분위기에 맞게만 정해줘도 될 것 같습니다
--[2] 클래스 ObjA가 Q_OBJECT의 인터페이스 역할을 할 수 있게 선언하는 것이라 볼 수 있겠네요
      Q_DECLARE_INTERFACE가 Qt의 4.8.x에선 안그랬는던거 같은데..
      5.x로 넘어온 언제부턴가 반드시 이렇게 해줘야만 되더군요..
--[3] MyObj가 Q_OBJECT가 아니라면 필요가 없겠지만, Q_OBJECT여야만 편리한 기능들을 많이
      사용할 수 있죠.
     
필요한 기능이나 개념을 묶어 ObjA로 만들어 놓았을경우 이렇게 사용하게 되면 MyObj는 QObject의 기능과
ObjA의 기능을 갖고 있는 클래스가 되죠. 당연히 dynamic_cast연산자로 변환이 가능합니다.



korone 14-07-08 17:21
 
좋은 강좌 감사합니다!!!!
워니 14-07-18 13:32
 
좋은정보 감사합니다
김아무… 14-11-12 14:38
 
하 이런 기능들이...
서종범 17-04-26 00:52
 
좋군요! 다중상속을 별로 사용하지 않아서 전 그런 문제가 있는지도 몰랐네요.
 
 

Total 198
번호 제   목 글쓴이 날짜 조회 추천
198 [QT/Win32] MFC에서 Qt 사용하기 팁. (3) devilqoo 09-10 3406 0
197 [QT/X11] QML 모델을 C++ 코드로 구현하는 방법 중 하나 (1) 구름님 12-03 5063 0
196 [QT/X11] QWT for qt android (1) 구름님 03-07 6537 1
195 [QT/Embedded] QTcpSocket사용 시 플러그 뽑힘 증상 체크 방법 요원009 11-13 10660 0
194 [QT/Win32] QML 에서 CustomModule 을 import 하여 사용하기 tmdwn 05-18 6144 0
193 [QT/Embedded] Qt update함수/repaint함수 사용법좀 알려주세여.. (1) 잉농 05-14 5919 0
192 [QT/Embedded] C++ Exception을 활용한 런타임 콜스택 정보 얻기 (1) korone 04-01 6258 0
191 [QT/Embedded] Qt 5.4.1 raspberry Pi 프로그램 개발하기 (5) 구름님 03-31 20902 1
190 [QT/Win32] Qt 다국어 처리 (2) korone 03-17 12559 0
189 [QT/Win32] signal to signal devilqoo 02-13 5573 0
188 [QT/Win32] Qt x64 바이너리 제공 사이트 (1) 인라이… 02-12 5518 1
187 [QT/Embedded] 우분투 Qt5 크로스 컴파일 (14/11/26 2차 수정) (9) 김아무… 11-12 15516 0
186 [QT/Embedded] Qt 5.3.2에서 Mouse Double Click시 이벤트 문제 (2) korone 11-11 5570 0
185 [QT/Embedded] QtWinExtras korone 11-11 5612 0
184 [QT/Win32] Qt 코딩 스타일 (편집 편) (4) devilqoo 10-22 10103 0
183 [QT/Win32] Qt와 C++11 (2) devilqoo 10-12 10460 1
182 [QT/Win32] Qt 에서의 이벤트 처리 (5) devilqoo 10-09 9989 0
181 [QT/Win32] QList와 QVector의 비교. (2) devilqoo 10-02 7227 0
180 [QT/Win32] Qt에서 사용되는 컨테이너들을 정리해 보았습… (4) devilqoo 10-01 8189 0
179 [QT/X11] qmake DEFINES 변수에 공백문자가 포함된 값을 설… (1) 별님 09-25 5195 0
178 [QT/Win32] 데이터 압축 관련 qCompress(), qUncompress() (9) 구름님 09-16 5804 0
177 [QT/Win32] QML 로 One-Source Multi-Platform (iOS, Android) 실행 tmdwn 09-03 7260 0
176 [QT/Win32] QML 로 iOS Application 제작하기 tmdwn 09-02 7216 0
175 [QT/Win32] QML 로 Android Application 제작하기 (4) tmdwn 09-02 7673 2
174 [QT/X11] qt에서 메모리 조작하기. (2) 나무나… 07-25 8046 0
173 [QT/Win32] Q_DECLARE_FLAGS 매크로 (2) 구름님 07-11 6500 2
172 [QT/Win32] Q_PROPERTY 매크로 (6) 구름님 07-09 8932 2
171 [QT/Win32] Q_INTERFACE 매크로에 대해.. (4) 구름님 07-08 6308 2
170 [QT/Win32] windeployqt.exe라는 프로그램이 있습니다. (4) 구름님 07-07 12581 1
169 [QT/X11] Qt App을 Mac Appstore에 올리기 (3) korone 07-02 7914 0
 1  2  3  4  5  6  7  


About korone.net | Copyright 2003 korone.net. All rights reserved.