QT 属性系统

最近学习了python 的描述器,想起之前学过的Qt 的属性系统,特此过来记录一下。

Qt的属性系统需要借助元对象来实现:

Q_PROPERTY(type name
           READ getFunction
           [WRITE setFunction]
           [RESET resetFunction]
           [NOTIFY notifySignal] )

用来为对象添加属性,包括属性的名称,读、写重置接口和告知。重置一般讲属性设置为某个默认值,告知一般定义为信号,而且一般在写接口和重置接口的末尾发出该信号。

此时定义的属性,便能通过 .property() 来获取,相当于 .property() 会调用这里定义的读方法;通过 .serproperty() 来设置属性,相当于 .setProperty() 会调用写方法。类似于python 的描述器,访问时调用 __get__() 方法;改写时调用 __set__() 方法。

另外,Qt也支持动态在运行时为对象添加属性,通过 .setProperty() 方法。

注意该方法只是为该对象动态添加,相当于python 的对象命名空间中,所以只有该对象能够查询得到。


打印对象所有的方法:

        int mCount =  w.metaObject()->methodCount();
        for(int i = 0; i < mCount; ++i)
        {
            qDebug() << QString::fromLatin1(w.metaObject()->method(i).methodSignature());
        }

打印对象所有的属性(动态添加的属性无法包含其中):

 int pCount = w.metaObject()->propertyCount();
        for(int j = 0; j < pCount; ++j)
        {
           qDebug() <<  w.metaObject()->property(j).name();
           qDebug() <<  w.property(w.metaObject()->property(j).name());
        }

打印所有的类信息(通过 Q_CLASSINFO 添加的):

   int infoCount = w.metaObject()->classInfoCount();
        for(int i=0; i<infoCount; i++)
        {

            qDebug()<< w.metaObject()->classInfo(i).name() <<"   "<< w.metaObject()->classInfo(i).value();

        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值