一般我们想要在不修改一个类源码的情况下添加一个属性,会继承它创建一个新的类,但是动态属性可以在不修改源码的情况下,给一个类加上一个新的属性,这样当我们需要一百个不同的属性时,就不用创建一百个新的类了,只用创建一个实例再添加新的属性。
动态属性相关函数:
dynamicPropertyNames()返回所有动态属性名称
property()返回参数对应的属性值,如果是空的则返回空的,0等
setProperty用于添加属性以及删除属性,举例
增加:
w.setProperty("int", 42);
w.setProperty("string", "123");
还可以是其他数据
删除:
w.setProperty("int",{});
测试代码:
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
QList<QByteArray> dynamicPropertyNames2 = w.dynamicPropertyNames();
for (const QByteArray &propertyName : dynamicPropertyNames2) {
qDebug()<<"==";
qDebug() << "Dynamic property name:" << propertyName;
qDebug() << "Value:" << w.property(propertyName);
}
w.setProperty("int", 42);
w.setProperty("string", "123");
QList<QByteArray> dynamicPropertyNames = w.dynamicPropertyNames();
for (const QByteArray &propertyName : dynamicPropertyNames) {
qDebug()<<"++";
qDebug() << "Dynamic property name:" << propertyName;
qDebug() << "Value:" << w.property(propertyName);
}
// for (const QByteArray &propertyName : dynamicPropertyNames) {
w.setProperty("int",{});
// }
QList<QByteArray> dynamicPropertyNames5 = w.dynamicPropertyNames();
for (const QByteArray &propertyName : dynamicPropertyNames5) {
qDebug()<<"==";
qDebug() << "Dynamic property name:" << propertyName;
qDebug() << "Value:" << w.property(propertyName).toString();
}
qDebug() << "Value:" << w.property("int").toString();
return a.exec();
}