Q_PROPERTY 属性
最后更新于:2022-04-02 02:15:22
[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();
}
```
';