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






배너 신청 문의

 
작성일 : 14-07-09 17:23
[QT/Win32] Q_PROPERTY 매크로
 글쓴이 : 구름님
조회 : 8,496   추천 : 2  
클래스에 새로운 프로퍼티를 부여합니다. 당연히 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를 사용하고 있으니 힘든점이 상당히 있네요
틀린거 있으면 알려주세요. 제가 잘못 이해하고 있는것이 바로잡고 가야죠.



비행소… 14-07-10 22:37
 
갑이 모르는 건 그나마 낫죠. 을이 모르는 상황이면, 더 난감 합니다.
인라이… 14-07-30 09:17
 
Q_PROPERTY 를 정의해두면 디자인타임을 지원하는 커스텀 위젯을 만들면 디자이너 property 창에도 해당 속성이 나타나고 편집이 가능합니다
     
구름님 14-07-31 08:56
 
UI작성시 디자이너를 사용하지 않고 코딩으로 직접 때려넣는 타입이라 몰랐습니다.
Qt 프로그래밍 툴들이 알고보면 제법 스마트해요 ㅎㅎ
          
인라이… 14-08-04 15:57
 
Qt  쓸수록 느끼지만 어플개발에 상당한 노력을 기울여 개발되어 편리한점이 많더라구요
devilqoo 14-08-05 13:40
 
QtScript 에서도 Q_PROPERTY()가 유용하게 쓰이고 있습니다.

var obj = new MyClass;

obj.setEnabled(true);

할 것을

obj.enabled = true; 처럼 쓸 수가 있습니다.
     
구름님 14-08-20 11:25
 
qml engine에서도 쓸 수 있으니 당연하겠네요~
기쁨과 슬픔은 나누면 두배라는 말은 헛소리라 생각하지만, 지식은 나누면 두배라는 말은 정말 그렇다라고 생각되네요 ^^
 
 

Total 198
번호 제   목 글쓴이 날짜 조회 추천
198 [QT/Win32] MFC에서 Qt 사용하기 팁. (3) devilqoo 09-10 2919 0
197 [QT/X11] QML 모델을 C++ 코드로 구현하는 방법 중 하나 (1) 구름님 12-03 4654 0
196 [QT/X11] QWT for qt android (1) 구름님 03-07 6216 1
195 [QT/Embedded] QTcpSocket사용 시 플러그 뽑힘 증상 체크 방법 요원009 11-13 9919 0
194 [QT/Win32] QML 에서 CustomModule 을 import 하여 사용하기 tmdwn 05-18 5776 0
193 [QT/Embedded] Qt update함수/repaint함수 사용법좀 알려주세여.. (1) 잉농 05-14 5632 0
192 [QT/Embedded] C++ Exception을 활용한 런타임 콜스택 정보 얻기 (1) korone 04-01 5965 0
191 [QT/Embedded] Qt 5.4.1 raspberry Pi 프로그램 개발하기 (5) 구름님 03-31 19891 1
190 [QT/Win32] Qt 다국어 처리 (2) korone 03-17 11796 0
189 [QT/Win32] signal to signal devilqoo 02-13 5278 0
188 [QT/Win32] Qt x64 바이너리 제공 사이트 (1) 인라이… 02-12 5202 1
187 [QT/Embedded] 우분투 Qt5 크로스 컴파일 (14/11/26 2차 수정) (9) 김아무… 11-12 14759 0
186 [QT/Embedded] Qt 5.3.2에서 Mouse Double Click시 이벤트 문제 (2) korone 11-11 5317 0
185 [QT/Embedded] QtWinExtras korone 11-11 5333 0
184 [QT/Win32] Qt 코딩 스타일 (편집 편) (4) devilqoo 10-22 9662 0
183 [QT/Win32] Qt와 C++11 (2) devilqoo 10-12 10070 1
182 [QT/Win32] Qt 에서의 이벤트 처리 (5) devilqoo 10-09 9466 0
181 [QT/Win32] QList와 QVector의 비교. (2) devilqoo 10-02 6852 0
180 [QT/Win32] Qt에서 사용되는 컨테이너들을 정리해 보았습… (4) devilqoo 10-01 7768 0
179 [QT/X11] qmake DEFINES 변수에 공백문자가 포함된 값을 설… (1) 별님 09-25 4963 0
178 [QT/Win32] 데이터 압축 관련 qCompress(), qUncompress() (9) 구름님 09-16 5497 0
177 [QT/Win32] QML 로 One-Source Multi-Platform (iOS, Android) 실행 tmdwn 09-03 6973 0
176 [QT/Win32] QML 로 iOS Application 제작하기 tmdwn 09-02 6939 0
175 [QT/Win32] QML 로 Android Application 제작하기 (4) tmdwn 09-02 7392 2
174 [QT/X11] qt에서 메모리 조작하기. (2) 나무나… 07-25 7637 0
173 [QT/Win32] Q_DECLARE_FLAGS 매크로 (2) 구름님 07-11 6182 2
172 [QT/Win32] Q_PROPERTY 매크로 (6) 구름님 07-09 8497 2
171 [QT/Win32] Q_INTERFACE 매크로에 대해.. (4) 구름님 07-08 6005 2
170 [QT/Win32] windeployqt.exe라는 프로그램이 있습니다. (4) 구름님 07-07 11938 1
169 [QT/X11] Qt App을 Mac Appstore에 올리기 (3) korone 07-02 7484 0
 1  2  3  4  5  6  7  


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