Qt笔记(六十一)之Qt属性系统Q_PROPERTY

104 篇文章 120 订阅

一.前言
楼主在学习QML调用C++的过程,接触到这个Q_PROPERTY这个,一开始没有太注意,但是QML要与C++交互,也要依赖Qt提供的属性系统,属性系统比较复杂。楼主只记录的所学习以及认识到的,不全面也不一定全对,于是就想记录分享一下

二.Qt属性系统
这是Qt 提供的属性系统;
它基于元对象系统,通过信号和插槽提供对象间的通信;
不依赖于编译器,可以在 Qt 支持的每个平台上使用任何标准 C++ 编译器

三.属性例子
3.1

 Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)

以上有7个是单词,分别是

Q_PROPERTY:用于声明属性的宏,Qt规定的
bool :属性类型
enabled :属性名称
READ isEnabled(这两个单词可以放一起理解):就是说可以通过 isEnabled去读属性值
WRITE setEnabled(这两个单词可以放一起理解):就是说可以通过 setEnabled去设置属性值
以上只是一个属性一个声明,但是其实没有实现,还需要分别是去实现isEnabled 和setEnabled,这样整个属性才可以真正使用

3.2属性提供的其他字段含义
READ:用于读取属性值,如果未指定成员变量(通过MEMBER ),则需要读取访问器函数。

WRITE:写访问器函数是可选的。用于设置属性值。它必须返回void,并且必须只接受一个参数,要么是属性的类型,要么是指向该类型的指针或引用。

MEMBER:如果未指定读取访问器函数,则需要成员变量关联。这使得给定的成员变量可读写,而无需创建读写访问器函数。如果需要控制变量访问,除了成员变量关联(但不是两者)之外,还可以使用读或写访问器函数。

RESET:复位功能是可选的。它用于将属性设置回其特定于上下文的默认值。

NOTIFY:通知信号是可选的。如果已定义,它应该指定该类中的一个现有信号,该信号在属性值更改时发出。成员变量的通知信号必须采用零个或一个参数,这些参数必须与属性的类型相同。参数将采用属性的新值。仅当属性确实发生更改时才应发出NOTIFY信号,以避免绑定在QML中被不必要地重新计算。

REVISION:修订号是可选的。如果包含,它将定义属性及其通知程序信号,以便在特定版本的API中使用(通常用于暴露于QML)。如果不包含,则默认为0。

DESIGNABLE:表示属性是否应该在GUI设计工具(例如Qt Designer)的属性编辑器中可见。大多数属性是可设计的(默认为true)。可以指定布尔成员函数,而不是true或false。

SCRIPTABLE:表示脚本引擎是否应该访问此属性(默认为true)。可以指定布尔成员函数,而不是true或false。

STORED:表示属性是应该被认为是独立存在还是依赖于其他值。它还指示在存储对象状态时是否必须保存属性值。

USER:表示是将属性指定为类的面向用户属性还是用户可编辑属性。通常,每个类只有一个用户属性(默认值为false)。

CONSTANT:表示属性值是常量。对于给定的对象实例,常量属性的READ方法每次调用时必须返回相同的值。对于对象的不同实例,此常量值可能不同。常量属性不能有写入方法或通知信号。
FINAL:表示派生类不会重写该属性。在某些情况下,这可以用于性能优化,但不是由moc强制执行的

四.获取属性
1.获取QWidget的支持的属性

 int count = this->metaObject()->propertyCount();
    for(int i=0;i<count;i++)
    {
        qDebug()<<this->metaObject()->property(i).name();
    }

在这里插入图片描述
2.读取属性值

    qDebug()<<"宽度:"<<this->property("width").toInt();
    qDebug()<<"高度:"<<this->property("height").toInt();

在这里插入图片描述
3.设置属性值

   this->setProperty("size",QSize(200,200));

在这里插入图片描述

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值