多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## 概述 1. 为了保持类的封装特性,通常成员变量需要保持私有状态 2. 而为了与其他对象协作,就需要提供相应的 get/set 函数 3. 如果成员变量的数值发生了变化,通常也需要提供通知(NOTIFY)信息告知相关对象 格式: ``` Q_PROPERTY(type name READ getFunction [WRITE setFunction] [RESET resetFunction] [NOTIFY notifySignal] ) ``` > 不设置Write,NOTIFY 就只是只读元素 **枚举定义** 枚举必须使用 Q_ENUMS 定义 ``` enum CustomType{ Corporate,Individual,Educational,Goverment }; Q_ENUMS(CustomType); ``` ## 实例 ### 通知实例 hello.h ``` class Hello : public QObject { Q_OBJECT Q_PROPERTY(QString nameNick READ nameNick WRITE setnameNick NOTIFY nameNickChanged) public: explicit Hello(QObject *parent = nullptr); const QString& nameNick(); signals: void nameNickChanged(const QString &strNewName); public slots: void setnameNick(const QString &strNewName); private: QString m_nameNick; }; ``` hello.cpp ``` Hello::Hello(QObject *parent) : QObject(parent) { World *w1=new World(); //connect 可以添加在 MainWindow 上,但是 connect 需要在 setnameNick 前声明 connect(this,&Hello::nameNickChanged,w1,&World::r_nameNickChanged); } const QString &Hello::nameNick() { return m_nameNick; } void Hello::setnameNick(const QString &strNewName) { if(strNewName == m_nameNick){ return ; } m_nameNick=strNewName; emit nameNickChanged(strNewName); } ``` main.cpp ``` int main(int argc, char *argv[]) { QApplication a(argc, argv); Hello h; // 方式一 h.setnameNick("213"); // 方式二 h.setProperty("nameNick","345"); return a.exec(); } ```