QTCreator能否自动生成setter/getter方法?

32
尽管进行了一些搜索,我仍然无法找到一种使用QT Creator 2.3.1自动生成C++类的Getter和Setter方法的方法。你们知道如何实现吗?
4个回答

51

在您的成员上右键,然后选择 重构,再选择 生成getter和setter成员函数 即可完成 :)

示例


在Qt Creator 3.2.x中,创建成员,然后单击它并按 alt+Enter

输入图像说明


看起来这正是我想要的 :) 但是重构只给我提供了重命名字段的选项。我正在使用QT Creator 2.3.1,这是为什么呢?还是需要在设置中进行调整? - merours
2
@fxm 嗯,我正在运行2.8.1,这可能是两个版本之间的差异。我会看一下,但也许你应该考虑更新。 - Thomas Ayoub
正在更新,没想到代码库中会有这么大的差距。无论如何,感谢您的回答! - merours
在我的看法中,Qt Creator 3.2.1 中似乎没有这样的选项,如果有其他方法,请告诉我。 - Kahn

21

将文本光标定位于类定义中的成员变量上,然后按下Alt+Enter。


这对我不起作用,在VirtualBox中运行Ubuntu 14下的Qt Creator。 - Phil Rogers

1
对我来说,右键点击,重构,创建Getter和Setter成员函数是有效的,除非成员是布尔类型。

我猜当你改变属性名称时,这并不是很方便。 - user2019716

0

使用宏,可以按照以下方式同时创建getter、setter和信号:

#define GETSET(type, var) \
  protected: \
    type m##var; \
  public: \
    type Get##var() const \
    {\
      return m##var; \
    }\
    void Set##var(type iVal) \
    {\
      m##var = iVal; \
      var##Changed(iVal); \
    }

并调用宏:

class Student : QObject
{
  Q_OBJECT
  public signals:
    void NameChanged(const QString & name);
    void AddressChanged(const QString & address);
    void BirthDateChanged(const QDate & date);

  GETSET(QString, Name)
  GETSET(QString, Address)
  GETSET(QDate, BirthDate)
}

这段代码每次调用setter时都会发出一个...Changed信号,而Qt文档(属性系统)明确指出:“为了避免在QML中不必要地重新评估绑定,应仅在属性实际更改时发出NOTIFY信号。” - tistolz
在发出信号之前,您可以简单地检查值是否已更改。 - user2019716

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接