为什么我们通常只在私有部分给出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/

10-12 15:35