Q_PROPERTY 매크로 > QT 강좌/팁

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

QT 강좌/팁

QT/Win32 Q_PROPERTY 매크로

페이지 정보

작성자 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 6건 조회 9,492회 작성일 14-07-09 17:23

본문

클래스에 새로운 프로퍼티를 부여합니다. 당연히 Q_OBJECT여야 합니다.
QPropertyAnimation에서 해당 프로퍼티를 사용할 수 있고, QML에서 쓰일 엘리먼트 제작시에도 반드시 필요합니다.
먼저 소스를 봅시다! Q_PROPERTY에 대한 자세한 내용은 물론 Qt Assistant를 보시구요

// somewhere_0.h
#include <QApplication>
#include <QDesktopWidget>

class MyWidget : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(int centerWidth READ centerWidth WRITE setCenterWidth NOTIFY centerWidthChanged) --[1]
public:
    MyWidget(QWidget* parent = 0) : QWidget(parent) {}

signals:
    void centerWidthChanged();

private:
    int centerWidth() { return width(); } --[2]
    void setCenterWidth(int _width) { --[3]
        if(_width >= 50) {
        QRect myR = QRect(0, 0, _width, height());
        myR.moveCenter(qApp->desktop()->screenGeometry(this).center());
        setFrameGeometry(myR);
        emit centerWidthChanged();
        }
    }
};

// somewhere_1.cpp
MyWidget* w = new MyWidget();
w->show();

//...

QPropertyAnimation* ani = new QPropertyAnimation(w, "centerWidth"); --[4]
ani->setStartValue(w->width());
ani->setEndValue(50);
ani->start(); --[5]

--[1] Q_PROPERTY(타입 프로퍼티명 READ 읽을때메소드 WRITE 저장시메소드 NOTIFY 변경시시그널)
      READ or WRITE or NOTIFY는 때에 따라서는 생략이 가능합니다. 이외에도 많은 옵션들이 있습니다.
      다시한번 말씀드리지만, Qt Assistant를 자주 보세요. 영어공부도 되고 일석이조입니다~
--[2] READ centerWidth -> READ width 이렇게 width() 메소드를 써도 되는것 아니냐 할수도 있겠습니다만!
      프로퍼티와 액세스메소드의 이름을 정하는 규칙이란게 있더군요. 지금은 어떨지 몰라도
      예전버전에서는 그 규칙에서 벗어나면 어떤때는 오류가 났었거든요. 초기에 멋도 모르고 이것저것
      해봤는데 에러만 나더군요.. 그래서 위처럼 쓰는방법이 딱이다 싶어 그렇게 버릇들였습니다.
      Q_PROPERY 매크로내에서 '프러퍼티명'과 '읽을때메소드'의 이름은 같게 해주고요,
      get/set규칙이 Qt에서는 'method()--get, setMethod()--set', 'property()--get, setProperty()--set'
      이처럼, 메소드의 첫글자는 반드시 영문자소문자로 시작하고, set메소드는 get메소드에서 첫문자를
      대문자로 바꾸고 그앞에 prefix로 set을 붙여야 하는 겁니다.
      Q_PROPERTY(int property READ getProperty WRITE setProperty) -> X
      Q_PROPERTY(int property READ property WRITE setProperty)    -> O
      그러므로, 이름이 틀린 width 쓸수는 없을 겁니다. 몰라요 하여간 접땐 그랬어요..
--[3] 사용자정의 프로퍼티라는것이 한마디로 엿장수 맘대로 입니다. 맘대로 코딩하세요
--[4] Q_PROPERTY매크로에서 정의한 프로퍼티명이 여기에서 문자상수로 쓰였네요.
      어찌된 영문일까요? Meta-Object시스템의 마법이 아닐까 싶습니다.
--[5] 실행되면 ani의 세팅값에 따라서 w의 애니메이션 동작을 볼 수 있습니다.
      보면, w의 width()가 50으로 줄어들며 동시에 x()값도 같이 변하게 되겠죠.
      현재 w가 위치한 화면상의 정중앙에 박힌채로..

테스트 안해봤으니 따라하셔서 에러난다면 뭐라하지 마시고 될때까지 직접 고쳐서 해보세요~

언젠가 갑측 거래업체 미팅을 갔더니 그쪽 개발자분들이 그러더군요 'Qt가 뭐죠?'
제 주변환경이 그모양입니다 ㅜㅜ
혼자만 Qt를 사용하고 있으니 힘든점이 상당히 있네요
틀린거 있으면 알려주세요. 제가 잘못 이해하고 있는것이 바로잡고 가야죠.

추천2

댓글목록

인라이너님의 댓글

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

Q_PROPERTY 를 정의해두면 디자인타임을 지원하는 커스텀 위젯을 만들면 디자이너 property 창에도 해당 속성이 나타나고 편집이 가능합니다

구름님님의 댓글의 댓글

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

UI작성시 디자이너를 사용하지 않고 코딩으로 직접 때려넣는 타입이라 몰랐습니다.
Qt 프로그래밍 툴들이 알고보면 제법 스마트해요 ㅎㅎ

devilqoo님의 댓글

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

QtScript 에서도 Q_PROPERTY()가 유용하게 쓰이고 있습니다.

var obj = new MyClass;

obj.setEnabled(true);

할 것을

obj.enabled = true; 처럼 쓸 수가 있습니다.

구름님님의 댓글의 댓글

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

qml engine에서도 쓸 수 있으니 당연하겠네요~
기쁨과 슬픔은 나누면 두배라는 말은 헛소리라 생각하지만, 지식은 나누면 두배라는 말은 정말 그렇다라고 생각되네요 ^^

Total 198건 1 페이지
QT 강좌/팁 목록
번호 제목 글쓴이 조회 추천 날짜
198 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 4030 0 09-10
197 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5573 0 12-03
196 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6946 1 03-07
195 QT/Embedded no_profile 요원009 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11286 0 11-13
194 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6530 0 05-18
193 QT/Embedded no_profile 잉농 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6286 0 05-14
192 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6667 0 04-01
191 QT/Embedded no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 22208 1 03-31
190 QT/Win32 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13415 0 03-17
189 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5907 0 02-13
188 QT/Win32 no_profile 인라이너 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5839 1 02-12
187 QT/Embedded no_profile 김아무개 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 16276 0 11-12
186 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5876 0 11-11
185 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5915 0 11-11
184 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10641 0 10-22
183 QT/Win32
Qt와 C++11 댓글+ 2
no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10982 1 10-12
182 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10630 0 10-09
181 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7620 0 10-02
180 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8759 0 10-01
179 QT/X11 no_profile 별님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5449 0 09-25
178 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6122 0 09-16
177 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7588 0 09-03
176 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7498 0 09-02
175 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7993 2 09-02
174 QT/X11 no_profile 나무나무나무 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8474 0 07-25
173 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6822 2 07-11
열람중 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9493 2 07-09
171 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6637 2 07-08
170 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13173 1 07-07
169 QT/X11 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8311 0 07-02
게시물 검색

  • 게시물이 없습니다.

회원로그인

설문조사

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

접속자집계

오늘
188
어제
539
최대
3,878
전체
4,094,909

Copyright © korone.net. All rights reserved.