为什么我们通常只在私有(private)部分给出 Q_OBJECT?
我尝试了一个示例程序,在公共(public)部分给出它,我发现没有区别。
如果有人知道,你能告诉我原因吗。
最佳答案
默认情况下,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
以确保什么都没有坏。因此,如果您在 public
部分中声明您的 Q_OBJECT
,您可能会得到一个有趣的结果,即之后的内容不再公开:)
关于qt - 为什么我们只在私有(private)部分提供 Q_OBJECT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22981346/