Qt 属性系统
The Property System
一、简介
Qt 提供了一个复杂的属性系统,类似于一些编译器供应商提供的属性系统。然而,作为一个独立于编译器和平台的库,Qt 不依赖于非标准编译器特性,如 __property 或 [property]。Qt 解决方案可以在 Qt 支持的每个平台上使用任何标准 C++ 编译器。它基于元对象系统,通过信号和插槽提供对象间的通信。
Qt 设计师软件中的属性编辑器就利用到了 Qt 属性系统。
二、属性的声明
要声明属性,请在继承了 QObject 的类中使用 Q_PROPERTY() 宏。
Q_PROPERTY(type name
READ getFunction
[WRITE setFunction]
[RESET resetFunction]
[NOTIFY notifySignal]
[REVISION int]
[DESIGNABLE bool]
[SCRIPTABLE bool]
[STORED bool]
[USER bool]
[CONSTANT]
[FINAL])
下面是一些来自类 QWidget 的属性声明的典型示例。
Q_PROPERTY(bool focus READ hasFocus)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
Q_PROPERTY(QCursor cursor READ cursor WRITE setCursor RESET unsetCursor)
属性的行为类似于类数据成员,但它具有通过元对象系统访问的附加特性。
属性名称 | 解释 |
---|---|
READ | 需要提供一个 READ 访问函数,用来读取属性值。理想情况下,const 函数更适合,因为只是读取属性值。它必须返回属性的类型,或该类型的指针或引用。例如, QWidget::focus 是一个只读属性,带有 READ 函数。QWidget::hasFocus()函数原型如下: bool hasFocus() const; |
WRITE | WRITE 访问器函数是可选的,它用 |