为什么我们通常只在私有部分给出Q_OBJECT?我在公共部分给出了一个示例程序,但没有发现任何区别。如果有人知道,您可以告诉我原因。
最佳答案
默认情况下,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上如此,因此您可以看到它切换到
public
可见性级别以声明所需的功能,然后又切换回private
以确保没有损坏。因此,如果在Q_OBJECT
部分中声明public
,则可能会产生一个有趣的结果,就是以后的内容不再公开:)关于qt - 为什么我们只在专用部分给出Q_OBJECT?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22981346/