QT属性系统
属性的定义
QT提供一个Q_PROPERTY()的宏来定义属性:
READ
WRITE
MEMBER:指定一个成员变量与属性的关联,成为可读可写属性,无需子啊设置READ,WRITE属性
RESET:可选,设置一个属性缺省值
NOTIFY:可选,设置一个信号,属性变换的时候发射信号
DESIGNABLE:是否在”设计"里面可见,默认可见(true)
CONSTANT:表示一个常数,不能喝WRITE和NOTIFY共存
FINAL:表示定义的属性不能被重载
例子:
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
属性的使用
利用property()函数来读属性
利用setProperty()函数来改变属性值
例子:
QPushButton *but = new QPushButton();
but->setParent(this);
QObject *object = but;
qDebug() << object->property("text");//QVariant(QString, "")
object->setProperty("text", "测试");
qDebug() << object->property("text");//QVariant(QString, "测试")
动态属性
QObject::setProperty()函数可以在类运行的时候定义一个新的属性,称之为动态属性。动态属性是针对类的实例定义的。
附加信息
用Q_CLASSINFO()可以为类添加“名称-值”信息,如:`
class QMyClass : public QObject
{
Q_OBJECT
Q_CLASSINFO("version","3.0.1‘)//添加版本号
...
}
定义了附加信息后,可以通过classInfo(int)来获取某个附加信息,函数定义如下:
QMetaClassInfo QMetaObject::classInfo(int index) const
例子:
/***********************************
在这之先定义一个类MyClass继承QObject
*class MyClass : public QObject
{
Q_OBJECT
Q_CLASSINFO("version", "3.1.1")
Q_CLASSINFO("author", "hello word")
public:
explicit Testq(QObject *parent = nullptr);
signals:
public slots:
};
*************************************/
//定义一个对象
MyClass *myclass= new MyClass;
//打印附加信息
qDebug() << myclass->metaObject()->classInfo(0).name();//version
qDebug() << myclass->metaObject()->classInfo(0).name();//3.1.1
注意:
需要添加头文件
#include<QMetaObject>
#include<QMetaClassInfo>