Q_INTERFACE 매크로에 대해.. > QT 강좌/팁

본문 바로가기
사이트 내 전체검색

QT 강좌/팁

QT/Win32 Q_INTERFACE 매크로에 대해..

페이지 정보

작성자 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 4건 조회 10,406회 작성일 14-07-08 15:09

본문

다중상속을 잘 활용하면 프로그램 코드들을 좀 효율적으로 관리할 수 있잖아요
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연산자로 변환이 가능합니다.

추천2

댓글목록

Total -221건 1 페이지
QT 강좌/팁 목록
번호 제목 글쓴이 조회 추천 날짜
-221 Qtopia no_profile 혼자열 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7 0 09-23
-222 Qtopia no_profile 혼자열 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13 0 09-19
-223 Qtopia no_profile 혼자열 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 22 0 09-17
-224 Qtopia no_profile 두부콩 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 22 0 09-16
-225 Qtopia no_profile 두부콩 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 14 0 09-15
-226 Qtopia no_profile 두부콩 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 44 0 09-09
-227 Qtopia no_profile 두부콩 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 45 0 09-08
-228 QT/Win32 no_profile 이지수입니다 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3866 0 02-14
-229 QT/Win32 no_profile 주영대감 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4740 0 05-31
-230 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10711 0 09-10
-231 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10678 0 12-03
-232 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11873 1 03-07
-233 QT/Embedded no_profile 요원009 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 16624 0 11-13
-234 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10422 0 05-18
-235 QT/Embedded no_profile 잉농 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10477 0 05-14
-236 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10957 0 04-01
-237 QT/Embedded no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 30364 1 03-31
-238 QT/Win32 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 21198 0 03-17
-239 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9442 0 02-13
-240 QT/Win32 no_profile 인라이너 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9844 1 02-12
-241 QT/Embedded no_profile 김아무개 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 22605 0 11-12
-242 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10101 0 11-11
-243 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10190 0 11-11
-244 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 16564 0 10-22
-245 QT/Win32
Qt와 C++11 댓글+ 2
no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 16627 1 10-12
-246 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 18588 0 10-09
-247 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11959 0 10-02
-248 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 15156 0 10-01
-249 QT/X11 no_profile 별님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8730 0 09-25
-250 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10599 0 09-16
게시물 검색

  • 게시물이 없습니다.

회원로그인

설문조사

새로운 홈페이지에 대한 평가

접속자집계

오늘
812
어제
969
최대
4,337
전체
4,970,386

Copyright © korone.net. All rights reserved.