2014-02-23 5 views
12

Q_PROPERTY의 사용법을 이해할 수 없습니다. Q_PROPERTY가 프로그램을 방어하는 데 어떻게 도움이됩니까? 그것은 무엇을 위해 사용됩니까? 나는 포럼을 보았지만 실제로 그 응용을 할 수 없었다. 나는 예제를 이해했지만 사용법은 이해하지 못했다.Qt에서 Q_PROPERTY의 의미는 무엇입니까?

다음은 예제입니다. 무엇을 얻을 수 있습니까? 나는 읽기가 독서의 특권을 줄 것이라는 점을 이해합니다.

쓰기 속성은 쓰기 권한 만 부여합니다. 그러나 그것의 필요성은 무엇입니까? 누군가 그것을 예증 할 수 있습니까?

class MyClass : public QObject 
{ 
    Q_OBJECT 
    Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged) 
    Q_ENUMS(Priority) 

public: 
    MyClass(QObject *parent = 0); 
    ~MyClass(); 

    enum Priority { High, Low, VeryHigh, VeryLow }; 

    void setPriority(Priority priority) 
    { 
     m_priority = priority; 
     emit priorityChanged(priority); 
    } 
    Priority priority() const 
    { return m_priority; } 

signals: 
    void priorityChanged(Priority); 

private: 
    Priority m_priority; 
}; 

답변

7

은 다음과 같은 효과가 있습니다

  • 그것은 메타 오브젝트 시스템을 사용할 수 있으므로이 QML 등에서 사용 크션

  • 그것보다 더 옵션이 될 수 그냥 읽고 쓰십시오. 알림, 재설정 등을 살펴보십시오. QtCreator (디자이너)에 통합하는 것도 더 쉽습니다.

  • Qt 5.1 이후의 상용구는 일반적인 읽기 및 쓰기 사례로 작성할 필요가 없으므로 작성해야합니다.

+0

첫 번째 점에 대해서는 우리가 인터페이스를 생성했다면 내성적 일 수 있습니다. 거기에 속성을 지정할 필요가 없습니다. QML과 관련하여 Q_INVOKABLE 또는 SLOT을 선언하면 QML에서 호출 할 수 있습니다. QProperty가 어떻게 영향을 줍니까? 두 번째 요점은 더 많이 할 수 있다는 것에 동의합니다. 셋째, 나는 이해하지 못했다. –

+0

@SHREYASJOSHI : 슬롯은 일반적으로 void 반환 값에 사용됩니다. Q_INVOKABLE은 각 메소드에 대해 쓰기가 지루합니다. 더욱이, 내성 검사는 QML에서 사용하는 것만을위한 것이 아니며, 실제로 수행 할 수 있다고해도 QML에서 실제 속성으로 사용하지 않고 함수 호출로 사용합니다. 그것은 성가시다. 세 번째 요점 : 일반적으로 동일한 상용구 일 때 자신의 getter/setter를 작성하는 것은 의미가 없습니다. Qt 5가 자동 생성합니다. – lpapp

+3

+1은 "Qt 5로 상용구를 작성하고 공통된 읽기 및 쓰기 케이스"*에 대해 알지 못했습니다. 하지만 그걸 기록하는 링크가 있니? (예를 들어 [여기] (http://qt-project.org/doc/qt-5.0/qtcore/properties.html)에 대해서는 아무 것도 찾을 수 없습니다.) – hyde