Qt之自定义属性Q_PROPERTY使用的一些体会

从Qt帮助文档中搜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])

看了这么多,其实到目前为止,我用到的并不多,就说是常用的几个吧。
举个例子:

Q_PROPERTY(QString title READ title WRITE setTitle)

每个属性都需要可以访问,这个就定义了类似其他语言中的get和set方法。
QString表示的是类型,title是名称,READ title是读的方法
下面是需要自己定义普通成员函数和成员变量的

QString title()
{
	return m_title;
}

void setTitle(const QString &title)
{
	m_title = title;
}

//有个成员变量
QString m_title;

我们再看这个:

 Q_PROPERTY(type name
             (READ getFunction [WRITE setFunction] |
              MEMBER memberName [(READ getFunction | WRITE setFunction)])

看到这个或运算符,就知道这几个是可选的。
一个Q_PROPERTY定义属性可以是只读的

 Q_PROPERTY(type name READ getFunction)

可读可写的
写法一:

Q_PROPERTY(type name READ getFunction WRITE setFunction)

写法二:

Q_PROPERTY(type name MEMBER memberName)

写法三:

Q_PROPERTY(type name MEMBER memberName READ getFunction)

写法四:

Q_PROPERTY(type name MEMBER memberName WRITE setFunction)

有人说:你这不是孔乙己问茴香豆的“茴”字有几种写法么?

其实不是,我们看到写法一和写法二是最常见的,写法二最简洁,它帮我们自定义了get和set方法。
写法一的灵活度最大,get和set方法都需要我们自定义。写法三和写法四是get或者set其中的一种可以自定义。

有一种是错误的就是同时用了同一个Q_PROPERTY中既又READ和WRITE ,又有MEMBER,这种写法就多此一举了。

我们在实践中,尤其是在qml中,还有一个常用的 [NOTIFY notifySignal]
就是这个,它需要我们定义一个信号
还是用官方的帮助文档举例(在帮助目录中搜索The Property System)

    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;

NOTIFY 定义的是属性在发生变化的时候,会发送一个这个的信号,去进行通知。

如果大家有兴趣,可以看看这篇文章里,对上面的每个属性的用法都做了说明:
Qt之自定义属性Q_PROPERTY

总结一下:到目前为止,我们知道了 READ、WRITE 、MEMBER、以及NOTIFY 的用法。

这也是我在工作中目前用到的,“少则得,多则惑”。

这里有个实例:
Qt的属性动画和串行动画组结合的先淡入再淡出的小例子

参考:
Qt之自定义属性Q_PROPERTY

QT之Qt之Q_PROPERTY宏理解

[Qt入门篇]5 Qt的属性系统——声明属性

[Qt入门篇]6 Qt的属性系统——READ/WRITE/MEMBER

[Qt入门篇]7 Qt的属性系统——NOTIFY和RESET

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值