qt - 为什么我们只在私有(private)部分提供 Q_OBJECT?

标签 qt private public qobject

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

相关文章:

QTableWidget 只编辑一列,其余的不可编辑

C++ - 类中的私有(private)变量

c++ - vector 类私有(private)/公共(public)

c++ - QT : webkit 中的未知模块

c++ - 将 std::unique_ptr 用于 QMainWindow 时退出时出现 QT 应用程序段错误

java - 构建器模式(java)。为什么 Builder 类是公共(public)的?

java - 继承中的私有(private)方法

java - 对象可以是私有(private)的和公共(public)的吗?

github,公共(public)或谷歌帐户用户是否可以报告问题?

c++ - 将一个 header 包含到我的 MVS 项目时出错