우리는 보통 개인 섹션에서만 Q_OBJECT를 제공합니까?
공개 섹션에서 샘플 프로그램을 제공했지만 아무런 차이점을 발견하지 못했습니다.
아무도 모른다면 그 이유를 말해 줄 수 있습니다. 기본적으로Q_OBJECT를 개인 섹션에만 제공하는 이유는 무엇입니까?
1
A
답변
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
섹션에 선언하면 이후의 것들은 더 이상 공개되지 않는다고 우스운 결과를 가져올 수 있습니다.
2
Q_OBJECT를 공개 식별자로 사용하면 공개 선언이 모두 비공개가됩니다. 예를 들면 다음과 같습니다.
class Dialog : public QDialog
{
public:
Q_OBJECT
Dialog(QWidget *parent = 0); // <- now declared as private
즉, 공개 섹션을 제출하면 아무런 변화가 없습니다. – QtUser
사실 내 대답을 편집했습니다. 공개 섹션에서 선언하면 나중에 비공개로 바뀝니다. – fritzone
놀랍습니다 .HatsUp to C++ – QtUser