Q_PROPERTY

Q_PROPERTY(type name
           (READ getFunction [WRITE setFunction] |
            MEMBER memberName [(READ getFunction | WRITE setFunction)])
           [RESET resetFunction]
           [NOTIFY notifySignal]
           [REVISION int]
           [DESIGNABLE bool]
           [SCRIPTABLE bool]
           [STORED bool]
           [USER bool]
           [CONSTANT]
           [FINAL])
  可以在编译静态属性,也可以在运行时通过setProperty()动态增加属性。其实永不了那么多属性,经常用的也就是那么几个。
READ 读取函数
WRITE 可选配置,指定函数,只能有一个参数,返回值必须为void。
MEMBER 关联成员变量,就可以不用指定read和write函数了。
REAET 属性返回上下文匹配的默认值
NOTIFY 指定参数变化信号,最多一个参数,且类型一致
REVISION QML中shiyong
DESIGNABLE 是否可以有dedigner使用,默认为true
SCRIPTABLE 是否可以被脚本引擎使用
STORED 属性的独立性,还是从其他属性衍生出来
USER 是否可以被用户编辑
CONSTANT 是否为常量,如果是则不可以 NOTIFY 和 WRITE
FINAL 是否可以 被派生类修改

READ WRITE RESET的指定函数可以是虚函数 ,继承来的函数
属性类型支持QVariant类型也可以是用户指定类型

可以使用 READ函数和setPropety()使用属性,setPropety()时如果属性不存在,则会增加属性。
class Window : public QWidget
{
    Q_OBJECT
    Q_PROPERTY(int normalProperty READ normalProperty)
    Q_PROPERTY(int newProperty READ newProperty REVISION 1)


public:
    Window();
    int normalProperty();
    int newProperty();
public slots:
    void normalMethod();
    Q_REVISION(1) void newMethod();
};
属性可以同元对象找出来。
   Window window;
    int expectedRevision = 0;
    const QMetaObject *windowMetaObject = window.metaObject();
    for (int i=0; i < windowMetaObject->methodCount(); i++)
        if (windowMetaObject->method(i).revision() <= expectedRevision)
            exposeMethod(windowMetaObject->method(i));
    for (int i=0; i < windowMetaObject->propertyCount(); i++)
        if (windowMetaObject->property(i).revision() <= expectedRevision)
            exposeProperty(windowMetaObject->property(i));



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值