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






배너 신청 문의

 
작성일 : 14-07-11 10:01
[QT/Win32] Q_DECLARE_FLAGS 매크로
 글쓴이 : 구름님
조회 : 5,437   추천 : 2  
파스칼 언어에는 열거형 상수들을 집합으로 표현하는 집합변수(?)라는게 있습니다. 정확한 명칭은 모르겠습니다. ;;
표현법이 어떠하던간에 C 계열에서는 비트연산의 한 방법인거죠. 쓰기에 따라 코드가 간결해지는 장점이 있습니다.
flag라 하는데요. Qt에서 프로그래머에게 코딩에 편리함을 주게끔 정해놓은 것이 Q_DECLARE_FLAGS 매크로죠.
대표적으로 QWidget::setWindowFlags(Qt::WindowFlags)에 들어가는 Qt::WindowFlags가 요렇게 되어있습니다.

#ifndef SOMEOBJECT_H
#define SOMEOBJECT_H

#include <QObject>

class SomeObject : public QObject
{
    Q_OBJECT
public:
    SomeObject(QObject* parent = 0) : QObject(parent) {
    }
    enum SOMEFLAG {
        FLAG_00 = 0x00,
        FLAG_0A = 0x01,
        FLAG_0B = 0x02,
        FLAG_A0 = 0x10,
        FLAG_B0 = 0x20
    }
    Q_DECLARE_FLAGS(SOMEFLAG_S, SOMEFLAG) //--[1]

signals:
    void flagChanged();
   
private:
    SOMEFLAG_S m_flags; //--[2]
//...
public:
    SOMEFLAG_S flags() const { return m_flags; }
};

Q_DECLARE_OPERATORS_FOR_FLAGS(SomeObject::SOMEFLAG_S) //--[3]

#endif SOMEOBJECT_H

--[1] : SOMEFLAG_S라는 flags형태의 타입을 선언하는데 열거형 SOMEFLAG를 지정해줍니다.
--[2] : 이제 SOMEFLAG_S라는 SOMEFLAG의 enum 항목들을 집합으로 갖는 flags형을 선언할 수 있습니다.
--[3] : SOMEFLAG_S로 선언된것을 (int)같은 캐스트연산자없이 바로 비트연산이 가능하도록 해줍니다.
         m_flags &= ~FLAG_0A;
         if(someObject->flags() & SomeObject::FLAG_0A) ...;
         이런식으로 코드를 작성할 수 있게 되죠.
         이게.. 잘못 기억했었는지는 몰라도 예전엔 안그랬던거 같은데 5.3.1에서는 Q_DECLARE_OPERATORS_FOR_FLAGS
         없이 Q_DECLARE_FLAGS로 정의만 해놓으면 비트연산이 되네요

위의 매크로들의 도움없이 enum형 그대로 flag식 코딩을 한다면 성격이 좀 급하신분은 제법 짜증나실 겁니다.
     SomeObject::SOMEFLAG flag = (SomeObject::SOMEFLAG)((int)flag & ~(int)SomeObject::FLAG_0A);
=> SomeObject::SOMEFLAG_S flags &= ~SomeObject::FLAG_0A;
꼭 알아둘 필요까지는 없는 매크로이지만 코딩작업이 편해지죠 ^^



devilqoo 14-07-24 20:06
 
한번 정리하고 싶은 내용이었는데 잘 보고 갑니다. :)
나무나… 14-07-25 23:04
 
무척이나 편리한 기능이네요!
이런 기능이 없어서 따로 라이브러리를 만들어 두고 vector 자료형에 문자열을 담아 처리하도록 했던 과거가 안타까워집니다... qt만세!
 
 

Total 201
번호 제   목 글쓴이 날짜 조회 추천
201 [QT/Win32] MFC에서 Qt 사용하기 팁. (2) devilqoo 09-10 1147 0
200 [QT/X11] QML 모델을 C++ 코드로 구현하는 방법 중 하나 (1) 구름님 12-03 3513 0
199 [QT/X11] QWT for qt android (1) 구름님 03-07 5251 1
198 [QT/Win32] QtSingleApplication 이용하기 (1) starbig 01-18 5109 0
197 [QT/Win32] Qt 에서 Daum Maps Api geo [ 주소->좌표 변환 ] 사… starbig 01-15 5639 0
196 [QT/Win32] Qt에서 윈도우 서비스 이용하기, Qt Windows Servic starbig 01-15 4468 0
195 [QT/Embedded] QTcpSocket사용 시 플러그 뽑힘 증상 체크 방법 요원009 11-13 8087 0
194 [QT/Win32] QML 에서 CustomModule 을 import 하여 사용하기 tmdwn 05-18 5127 0
193 [QT/Embedded] Qt update함수/repaint함수 사용법좀 알려주세여.. (1) 잉농 05-14 4868 0
192 [QT/Embedded] C++ Exception을 활용한 런타임 콜스택 정보 얻기 (1) korone 04-01 5217 0
191 [QT/Embedded] Qt 5.4.1 raspberry Pi 프로그램 개발하기 (5) 구름님 03-31 17333 1
190 [QT/Win32] Qt 다국어 처리 (2) korone 03-17 10048 0
189 [QT/Win32] signal to signal devilqoo 02-13 4615 0
188 [QT/Win32] Qt x64 바이너리 제공 사이트 (1) 인라이… 02-12 4519 1
187 [QT/Embedded] 우분투 Qt5 크로스 컴파일 (14/11/26 2차 수정) (9) 김아무… 11-12 12842 0
186 [QT/Embedded] Qt 5.3.2에서 Mouse Double Click시 이벤트 문제 (2) korone 11-11 4686 0
185 [QT/Embedded] QtWinExtras korone 11-11 4605 0
184 [QT/Win32] Qt 코딩 스타일 (편집 편) (4) devilqoo 10-22 8393 0
183 [QT/Win32] Qt와 C++11 (2) devilqoo 10-12 8434 1
182 [QT/Win32] Qt 에서의 이벤트 처리 (5) devilqoo 10-09 8072 0
181 [QT/Win32] QList와 QVector의 비교. (2) devilqoo 10-02 5936 0
180 [QT/Win32] Qt에서 사용되는 컨테이너들을 정리해 보았습… (4) devilqoo 10-01 6729 0
179 [QT/X11] qmake DEFINES 변수에 공백문자가 포함된 값을 설… (1) 별님 09-25 4396 0
178 [QT/Win32] 데이터 압축 관련 qCompress(), qUncompress() (9) 구름님 09-16 4831 0
177 [QT/Win32] QML 로 One-Source Multi-Platform (iOS, Android) 실행 tmdwn 09-03 6259 0
176 [QT/Win32] QML 로 iOS Application 제작하기 tmdwn 09-02 6254 0
175 [QT/Win32] QML 로 Android Application 제작하기 (4) tmdwn 09-02 6591 2
174 [QT/X11] qt에서 메모리 조작하기. (2) 나무나… 07-25 6675 0
173 [QT/Win32] Q_DECLARE_FLAGS 매크로 (2) 구름님 07-11 5438 2
172 [QT/Win32] Q_PROPERTY 매크로 (6) 구름님 07-09 7288 2
 1  2  3  4  5  6  7  


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