C++ 中的自定义可见性修饰符

Jon*_*Jon 2 c++

我正在阅读《信号与槽》| Qt Core 5.4,他们剪掉了以下代码。

#include <QObject>

class Counter : public QObject
{
    Q_OBJECT

public:
    Counter() { m_value = 0; }

    int value() const { return m_value; }

public slots:
    void setValue(int value);

signals:
    void valueChanged(int newValue);

private:
    int m_value;
};
Run Code Online (Sandbox Code Playgroud)

我以前见过privatepublic、 ,protected但从未见过这样的事情。

  • public slots:整体和可见性修饰符是怎么回事signals:(这就是它们的名字)?

  • 他们的意思是什么?他们在标准中的什么地方谈论这个?

  • 我什么时候可以/应该在我自己的代码中使用这些?

fra*_*ans 5

slots signals只需评估为空字符串或修饰符,它们是通过包含隐式定义的QObject.h。这些只是 Qt moc(元对象编译器)的标记。Q_OBJECT正在扩展到一些通用的 Qt 类接口。

将从moc您的标头生成代码,并通过这些宏您提供额外的信息,例如“这些方法是插槽”或“这将是一个 Qt 化的类”

您应该只在 Qt 项目中使用它们,并且在您开发一个“成为”并处理 Qt 对象的类的情况下。例如您自己的 Qt-Widget 或任何应该能够发送/接收信号的对象。

您不会在标准中找到有关这些宏的任何内容,因为它们不是标准的一部分。它只是 Qt 框架的扩展,只有在包含适当的 Qt 头文件时才能编译您的类。