在Qt中命名属性和方法

时间:2013-01-08 12:15:00

标签: qt properties naming-conventions

我想要这个:

class Test {
  private:
    int a;

  public:
    int a();
    int setA(int val);
}

在我看来,Qt libraray一直都是这样做的。 但我得到一个“声明blabla”编译器错误。这是为什么? 我真的必须将方法命名为 getA()吗?

我甚至尝试过使用Q_PROPERTY:

class Test : public QObject {
  Q_OBJECT
  Q_PROPERTY(int a READ a WRITE setA)

  public:
    int a(){return a}
    int setA(int val){a=val;}
}

这也行不通。

1 个答案:

答案 0 :(得分:4)

在Qt本身,数据成员通常属于私有类(Pimpl idiom),所以这不是问题。 如果你不使用Pimpl(这有点单调乏味,只有你必须保证二进制兼容性,或者有一个非常大的项目,其中reduce包含有足够的效果),最常见的方法是预先添加成员带有前缀,例如米_:

    Q_PROPERTY(int a READ a WRITE setA)

public:
    void setA( int a ) { m_a = a; }
    int a() const { return m_a; }

private:
    int m_a;

另一个优点是成员和局部变量总是很容易相互分辨。

备选方案:

  • 通过this->a访问变量(比m_a更繁琐)
  • 使用getA()(制作丑陋的API,恕我直言,但当然取决于你的API风格 - 如果其他一切都使用get *,那么应该跟风)