Q_PROPERTY 매크로 > QT 강좌/팁

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

QT 강좌/팁

QT/Win32 Q_PROPERTY 매크로

페이지 정보

작성자 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 6건 조회 13,768회 작성일 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 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 별님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8420 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 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11022 2 09-02
128 QT/X11 no_profile 나무나무나무 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13366 0 07-25
127 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10261 2 07-11
열람중 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13769 2 07-09
125 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10079 2 07-08
게시물 검색

  • 게시물이 없습니다.

회원로그인

설문조사

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

접속자집계

오늘
131
어제
651
최대
4,337
전체
4,923,736

Copyright © korone.net. All rights reserved.