我知道如何使用它,但是它的语法让我很困扰。“private slots:“在做什么?
我从未见过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);
...
4条答案
按热度按时间qnakjoqk1#
插槽是C++的Qt特定扩展。它只在通过Qt的预处理器元对象编译器(moc)发送代码后才编译。有关文档,请参阅http://doc.qt.io/qt-5/moc.html。
编辑:正如Frank所指出的,moc只在链接时才需要,额外的关键字用标准的预处理器#定义掉了。
5hcedyr02#
Qt插槽忽略了
public
、private
等关键字,所有插槽实际上都是公共的,可以连接xxb16uws3#
声明slot为private意味着你不能像其他方法一样从它们是private的上下文中引用它们,因此你不能将private slot地址传递给
connect
。如果您将信号声明为private,则表示只有此类可以管理它,但function member pointers do not have access restrictions:
除此之外,其他回答也是有效的:
signals
和slots
是空宏,不违反语言标准eaf3rand4#
如果我们要使用连接机制调用插槽,那么我们将它们声明为公共插槽。
如果我们不打算使用连接机制调用它们,那么我们就不将它们声明为插槽。
如果我们考虑用两种方式调用它们,那么可能是时候进行重构以适应以前的情况了。
我以前也这么想。
在整个Qt文档中,我看到它们都是公共的,但只在一个地方提到了私有插槽
Note: You need to include the QTest header and declare the test functions as private slots so the test framework finds and executes it.