-
Notifications
You must be signed in to change notification settings - Fork 0
qml property and PROPERTY macro
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName)
Q_PROPERTY(QColor color READ color WRITE setColor)说明:
Q_PROPERTY()是一个宏,用来在一个类中声明一个属性property,由于该宏是qt特有的,需要用moc进行编译,故必须继承于QObject类。
Q_PROPERTY(type name
READ getFunction
[WRITE setFunction]
[RESET resetFunction]
[DESIGNABLE bool]
[SCRIPTABLE bool]
[STORED bool])
For example:
Q_PROPERTY(QString title READ title WRITE setTitle)1.必须有一个read函数。
2.有一个可选的write函数。
3.如果定义了"stored"属性表明这是一直存在的。
4.一个reset函数能够把property设置成其默认状态
5.一个"desinable"属性表明该property能在GUI builder(一般为Qt Designer)可见
QObject类是所有Qt对象的基类,作为Qt对象模型的核心,提供了信号与槽机制等很多重要特性。Q_OBJECT宏必须在private区(C++默认为private)声明注册且定义了属性,才可以在QML中进行该属性的赋值.
一个property属性可以在C++中定义(用上面的方法),并且通过Q_PROPERTY注册到QML类型系统。当然,我们也可以在QML文档中通过如下语法自定义对象的property属性:
[default] property <propertyType> <propertyName>
通过这种方式,一个对象可以将一些特定的值暴露给其它对象,或者是更加简便的维护一些内部状态。 Property属性的名称必须以小写字母开头,且只能包含字母,数字和下划线。
JavaScript的保留关键字不能作为property属性的名称。
Default关键字是可选的.
定义一个自定义的property属性也就为该property属性隐式的创建了一个value-change信号,也就是关联了一个名为
on<PropertyName>Changed
的signal handler。<PropertyName>就是property属性的名称,而且首字母要大写。每个QML属性改变后都会产生信号
例如:下面就定义了两个property属性,并且实现了其signalhandler:
Rectangle {
property color perviousColor
property color nextColor
onNextColorChanged:
自定义property属性的合法类型
QML基本类型中的枚举类型都可以作为自定义property属性类型。
例如:下面都是合法的property属性声明;
一些QtQuick模块提供的基本类型是不能作为property类型的,除非在QML文档中导入QtQuick模块。 var基本类型是通用的类型,可以保存任意类型的值,包括lists和objects:
property var number:1.5
property var someString:"abc"
property var someList:[1, 2, "abc", "four"]
property var someObject: Rectangle { width:100; height:300; color:"red"}任何的QML对象类型都可以被用作property属性类型。例如:
property Item someItem
property Rectangle someRectangle