Q_DECLARE_FLAGS 매크로 > QT 강좌/팁

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

QT 강좌/팁

QT/Win32 Q_DECLARE_FLAGS 매크로

페이지 정보

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

본문

파스칼 언어에는 열거형 상수들을 집합으로 표현하는 집합변수(?)라는게 있습니다. 정확한 명칭은 모르겠습니다. ;;
표현법이 어떠하던간에 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;
꼭 알아둘 필요까지는 없는 매크로이지만 코딩작업이 편해지죠 ^^

추천2

댓글목록

나무나무나무님의 댓글

no_profile 나무나무나무 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

무척이나 편리한 기능이네요!
이런 기능이 없어서 따로 라이브러리를 만들어 두고 vector 자료형에 문자열을 담아 처리하도록 했던 과거가 안타까워집니다... qt만세!

Total 154건 1 페이지
QT 강좌/팁 목록
번호 제목 글쓴이 조회 추천 날짜
154 QT/Win32 no_profile 이지수입니다 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3303 0 02-14
153 QT/Win32 no_profile 주영대감 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4328 0 05-31
152 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10108 0 09-10
151 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10252 0 12-03
150 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11337 1 03-07
149 QT/Embedded no_profile 요원009 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 16071 0 11-13
148 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10075 0 05-18
147 QT/Embedded no_profile 잉농 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10013 0 05-14
146 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10526 0 04-01
145 QT/Embedded no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 29749 1 03-31
144 QT/Win32 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 20555 0 03-17
143 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9135 0 02-13
142 QT/Win32 no_profile 인라이너 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9424 1 02-12
141 QT/Embedded no_profile 김아무개 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 22094 0 11-12
140 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9634 0 11-11
139 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9688 0 11-11
138 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 15994 0 10-22
137 QT/Win32
Qt와 C++11 댓글+ 2
no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 16022 1 10-12
136 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 17844 0 10-09
135 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11585 0 10-02
134 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 14584 0 10-01
133 QT/X11 no_profile 별님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8421 0 09-25
132 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10201 0 09-16
131 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10770 0 09-03
130 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10618 0 09-02
129 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11023 2 09-02
128 QT/X11 no_profile 나무나무나무 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13366 0 07-25
열람중 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10262 2 07-11
126 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13769 2 07-09
125 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10079 2 07-08
게시물 검색

  • 게시물이 없습니다.

회원로그인

설문조사

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

접속자집계

오늘
139
어제
651
최대
4,337
전체
4,923,744

Copyright © korone.net. All rights reserved.