【问题标题】:Auto-generate setters/getters with QTCreator?使用 QTCreator 自动生成设置器/获取器?
【发布时间】:2013-11-12 19:16:17
【问题描述】:

尽管进行了一些搜索,但我还是找不到使用 QT Creator 2.3.1 为 C++ 类自动生成 getter 和 setter 的方法。 你们知道有什么方法吗?

【问题讨论】:

    标签: c++ qt qt-creator


    【解决方案1】:

    右键点击您的会员,然后点击Refactor,然后点击Generate Getter and Setter member function,您就完成了:)


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

    【讨论】:

    • 这看起来像我想要的 :) 但重构只能让我重命名该字段。我正在使用 QT Creator 2.3.1,这是为什么呢?还是在设置里有什么可以做的?
    • @fxm 好吧,我正在运行 2.8.1,它可能来自两个版本之间的差距。我会看看,但也许你应该考虑更新
    • 马上更新,没想到仓库会有这么大的差距。无论如何感谢您的回答!
    • 在我看来Qt creator 3.2.1中没有这样的选项,如果有其他方法,请告诉我
    【解决方案2】:

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

    【讨论】:

    • 这对我不起作用,在 VirtualBox 中的 Ubuntu 14 下运行 Qt Creator。
    【解决方案3】:

    对我来说,右键单击、重构、创建 Getter 和 Setter 成员函数都有效,除非成员是布尔值。

    【讨论】:

    • 我猜改属性名不是很方便
    【解决方案4】:

    使用宏,可以一起创建getter、setter和signal,如下所示:

    #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 文档(属性系统)明确指出:“只有在属性真正被更改时才应该发出 NOTIFY 信号,例如,以避免在 QML 中不必要地重新评估绑定。"
    • 您可以在发出信号之前检查值是否已更改
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多