QT属性系统

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值