Q_PROPERTY

一、定义

Qt提供了一个成熟的属性系统,Q_PROPERTY是一个宏,用来在类中声明一个属性。由于该特性是Qt所特有的,需要moc进行编译,故必须继承QObject.

查看Qt助手,我们可以看到如下定义:

看不懂?其实 这是一个正则表达式,我们可以根据该正则表达式来写出正确的参数。

二、参数解析

属性名name和类型type以及READ函数是必需的。类型可以是QVariant支持的任何类型,也可以是用户定义的类型。其他项是可选的。所有的属性默认为true,但USER默认为false。

READ:如果没有指定关键字MEMBER,则需要READ访问器函数, 它用来读取属性值。

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

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

RESET:RESET功能是可选的。 它用于将属性设置回其特定于上下文的默认值。 RESET函数必须返回void且不带任何参数。  

NOTIFY:NOTIFY信号是可选的。 如果定义了,它应该在类中指定一个现有的信号,每当属性的值发生变化时就会发出该信号。 MEMBER变量的NOTIFY信号必须接受零个或一个参数,这些参数必须与属性的类型相同。 NOTIFY信号只应在属性真正更改时发出,以避免在QML中不必要地重新计算绑定。

三、实例

  Q_PROPERTY(bool focus READ hasFocus)
  Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
  Q_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)

      Q_PROPERTY(QColor color MEMBER m_color NOTIFY colorChanged)
      Q_PROPERTY(qreal spacing MEMBER m_spacing NOTIFY spacingChanged)
      Q_PROPERTY(QString text MEMBER m_text NOTIFY textChanged)
      ...
  signals:
      void colorChanged();
      void spacingChanged();
      void textChanged(const QString &newText);

  private:
      QColor  m_color;
      qreal   m_spacing;
      QString m_text;

参考:

正则表达式 – 语法 | 菜鸟教程

QT基础知识(十二) Q_PROPERTY_我是路人乙1的博客-CSDN博客_q_property

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值