Qt之Q_PROPERTY宏理解

发布网友

我来回答

1个回答

热心网友

学习Qt的过程中,经常需要通过F2快捷键查看Qt类的定义,发现类定义中有很多Q_PROPERTY的内容,例如常用的QWidget类定义。

Qt中的Q_PROPERTY宏在Qt中非常常用,那么它有什么作用呢?

Qt提供了一个卓越的属性系统,Q_PROPERTY()是一个宏,用于在类中声明一个属性property。由于该宏是Qt特有的,需要使用moc进行编译,因此必须继承于QObject类。

Q_PROPERTY(type name READ getFunction [WRITE setFunction] [RESET resetFunction] [NOTIFY notifySignal] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] [USER bool] [CONSTANT] [FINAL])

之前一直在使用VS开发C++程序,接触过开发Ocx控件,有控件属性设置,Qt这里的属性系统可以与之前的知识联系起来。Qt的属性功能使我们能够选择访问数据成员的方式,属性就像类的数据成员,但在元对象系统中,它的其他特性是可见的(相对于类成员的一般情况下私有化)。

使用这个宏时,需要注意两个问题:

1)类型、属性名和READ(读)方法是必需的。也就是说前三个参数必须存在。类型可以是QVariant支持的任一类型,也可以是我们自定义的类型,其他的是可选的。下面的title属性定义可以这样说明:定义一个属性title,类型是QString,读title的方法是title()函数,写title的方法是setTitle,这里USER表示是否用户自定义类型,这里应该设置为false。

2)属性声明完毕后,我们还需要进行读写函数的声明和定义。

为什么要使用它?在哪里使用它呢?

答:Qt中类的属性是为脚本和元对象系统准备的,如QtScript、QML或QObject::property/setProperty等,主要用于属性封装,在脚本、库、QML开发中必须使用。

最常见的是在QML中访问C++,通过C++类公开属性来使用,例如上面的实例:

1、创建Qt Quick工程:qt PROPERTY

2、创建C++类TestProperty,公有继承于QObject

3、为TestProperty类设置上述属性title

Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged);

4、属性读写函数声明与实现

TestProperty.h

TestProperty.cpp

5、在main函数中注册这个类,导出到qml中

main.cpp

6、在qml中调用title属性

main.qml

运行后:原文链接:资料领取:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com