如何使用setter作为插槽在Qt中编写可读的c ++ getter和setter

时间:2014-01-30 11:10:12

标签: c++ qt signals-slots

对于问题的实质性更改感到抱歉,请参阅上面的修改。

我正在寻找一种可读的方法,使用setter作为SLOT在我的C ++类中编写getter和setter。

因为我的习惯,我习惯在课堂底部写下吸气剂和制定者,并且在吸气剂附近吸气。

以下是我现在的写作方式:

#include <QObject>

class MyClass : public QObject
{
    Q_OBJECT

public:
    MyClass(...);
    ~MyClass();

    void myPublicMethod();

public slots:
    void onEvent(...);

protected:
    int myVal;

//---------------------------------------------- getter and setter
public slots:
    void setVal(int v);
    const int getVal();

};

但是上一个问题的答案(参见编辑)指出了一些开销(我并不在乎)以及不必要地使用插槽来获取getter(这就是提出这个问题的动机)对于那些使用这门课程的人来说可能会更糟糕,并且会看到一些没有动力的吸气者。

编辑:问题发生重大变化。它是:

标题:Qt getter&amp;塞特作为公共插槽,坏主意?

我正在把所有的getter和setter都写成公共插槽。实际上我只使用setter作为插槽,但是将它们彼此靠近写一个可增强的可读性。

这是个坏主意吗?有副作用吗?

2 个答案:

答案 0 :(得分:2)

我说这是一个坏主意,因为它毫无意义,因此它会引发“wtf”(这通常是代码错误的标志)。

这是没有意义的,因为Qt信号不能返回值,而getter的唯一目的是返回一个值。所以制作getters插槽毫无意义。

我当然只谈论吸气剂。 Setter完全没问题(也很有用)作为插槽。

此外,一个类定义的每个元方法都有一些内存开销(并且在建立连接时可能会有一些性能开销,但不确定)。不多,但要记住这一点。

答案 1 :(得分:1)

除了额外的代码生成,您将没有任何副作用。每个插槽都会向类元信息添加一些数据+向moc生成的文件中添加一些代码。

您还可以使用Q_SLOT宏标记setter。并将两者放在同一个地方。