2014-04-10 4 views

답변

4

Q_OBJECT 매크로 펼쳐지는

#define Q_OBJECT \ 
public: \ 
    Q_OBJECT_CHECK \ 
    static const QMetaObject staticMetaObject; \ 
    Q_OBJECT_GETSTATICMETAOBJECT \ 
    virtual const QMetaObject *metaObject() const; \ 
    virtual void *qt_metacast(const char *); \ 
    QT_TR_FUNCTIONS \ 
    virtual int qt_metacall(QMetaObject::Call, int, void **); \ 
private: \ 
    Q_DECL_HIDDEN static const QMetaObjectExtraData staticMetaObjectExtraData; \ 
    Q_DECL_HIDDEN static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); 

적어도 내 Qt는 4.8에, 당신은 필요한 기능을 위해 private로 다시 선언 할 public 표시 수준으로 전환 볼 수 있습니다 아무 것도 깨지지 않았는지 확인하십시오. 따라서 을 public 섹션에 선언하면 이후의 것들은 더 이상 공개되지 않는다고 우스운 결과를 가져올 수 있습니다.

+0

즉, 공개 섹션을 제출하면 아무런 변화가 없습니다. – QtUser

+0

사실 내 대답을 편집했습니다. 공개 섹션에서 선언하면 나중에 비공개로 바뀝니다. – fritzone

+1

놀랍습니다 .HatsUp to C++ – QtUser

2

Q_OBJECT를 공개 식별자로 사용하면 공개 선언이 모두 비공개가됩니다. 예를 들면 다음과 같습니다.

class Dialog : public QDialog 
{  
public: 
    Q_OBJECT 

    Dialog(QWidget *parent = 0); // <- now declared as private