Qt“私人插槽:”这是什么?

我明白如何使用它,但它的语法困扰我。 什么是“私人插槽”?

我从来没有见过private关键字和:之前的类定义之间的东西。 在这里有一些奇特的C ++魔法吗?

例如:

#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); ... 

插槽是C ++的Qt特定扩展。 它只在通过Qt的预处理器,元对象编译器(moc)发送代码之后编译。 有关文档,请参阅http://doc.qt.io/qt-5/moc.html

编辑:正如弗兰克指出,MOC只是需要链接。 额外的关键字是用标准的预处理器去掉的。

Qt插槽会忽略publicprivate等关键字。 所有插槽实际上是公共的,可以连接

将插槽声明为私有意味着您将无法像在其他方法中那样从私有上下文中引用它们。 因此,您将无法通过专用插槽地址进行connect

如果你声明信号和插槽是私人的,你说只有这个类可以pipe理。

除此之外,还有其他答案也是有效的:
– 你仍然可以用技巧连接私人信号和插槽
signalsslots是空的macros,不会破坏语言标准